设计模式<c++> (4)装饰者模式
#include <iostream> class Beverage { //饮料 超类 public : //std::string description = "未知饮料"; 思考,为何这样使用成员变量不行????????????????????????????????????????? virtual std::string getDescription() { return "未知饮料"; } virtual double cost() = 0; }; class CondimentDecorator :public Beverage {//调料品 超类 public: virtual std::string getDescription()=0; }; class Espresso :public Beverage { //浓缩咖啡饮料 public: std::string getDescription() { return "浓缩咖啡饮料"; } double cost() { return 1.99; } }; class HouseBlend :public Beverage { //家常咖啡饮料 public: std::string getDescription() { return "家常咖啡饮料"; } double cost() { return 1.88; } }; //下面定义装饰者 class Mocha :public CondimentDecorator { public: Beverage *beverage; Mocha(Beverage *beverage) { this->beverage = beverage; } std::string getDescription() { return beverage->getDescription() + ",摩卡味"; } double cost() { return 2.0 + beverage->cost(); } }; class Soy :public CondimentDecorator { public: Beverage* beverage; Soy(Beverage* beverage) { this->beverage = beverage; } std::string getDescription() { return beverage->getDescription() + ",大豆味"; } double cost() { return 4.0 + beverage->cost(); } }; class Whip :public CondimentDecorator { public: Beverage* beverage; Whip(Beverage* beverage) { this->beverage = beverage; } std::string getDescription() { return beverage->getDescription() + ",奶油味"; } double cost() { return 9.9 + beverage->cost(); } }; int main() { Beverage *beverage1 = new Espresso(); std::cout << beverage1->getDescription() <<" 价格:" <<beverage1->cost()<<std::endl; Beverage *beverage2 = new HouseBlend(); std::cout << beverage2->getDescription() << " 价格:" << beverage2->cost()<<std::endl; beverage2 = new Whip(beverage2); beverage2 = new Soy(beverage2); beverage2 = new Mocha(beverage2); std::cout << beverage2->getDescription() << " 价格:" << beverage2->cost() << std::endl; delete beverage1; delete beverage2; return 0; }
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!