当前位置: 首页 > news >正文

wordpress 多站点 主站点成品人和精品人的区别在哪约

wordpress 多站点 主站点,成品人和精品人的区别在哪约,自动发帖软件,喀什网站建设公司一、案例背景 Starbuzz是以扩张速度最快而闻名的咖啡连锁店。如果你在街角看到它的店#xff0c;在对面街上肯定还会看到另一家。因为扩张速度实在太快了#xff0c;他们准备更新订单系统#xff0c;以合乎他们的饮料供应要求。他们原先的类设计是这样的…… 购买咖啡时在对面街上肯定还会看到另一家。因为扩张速度实在太快了他们准备更新订单系统以合乎他们的饮料供应要求。他们原先的类设计是这样的…… 购买咖啡时可以要求在其中加入各种调料例如蒸奶Steamed Milk、豆浆Soy、摩卡Mocha也就是巧克力风味或覆盖奶泡。星巴克会根据所加入的调料收取不同的费用。所以订单系统必须考虑到这些调料部分。这是他们的第一个尝试…… 很明显Starbuzz为自己制造了一个维护噩梦如果牛奶的价格上扬怎么办新增一种焦糖调料风味时怎么办 二、案例分析 看到这么多类时你肯定也会被震惊到……那么问题来了如何进行改进呢一个直截了当的解决方案是利用实例变量和继承就可以追踪这些调料。比如我们在基类中加上实例变量这些布尔值代表是否加上该调料牛奶豆浆摩卡奶泡…… #include iostream #include string using namespace std;class Beverage { private:string description {};bool milk {};bool soy {};bool mocha {};bool whip {};public:const string getDiscription(){return description;};void setDescription(const string description){this-description description (Add (milk ? Milk : ) (soy ? Soy : ) (mocha ? Mocha : ) (whip ? Whip : ) );}virtual const float cost(){return (milk ? 1 : 0) (soy ? 2 : 0) (mocha ? 1 : 0) (whip ? 1.5 : 0);}const bool hasMilk() const{return milk;};void setMilk(const bool value){milk value;};const bool hasSoy() const{return soy;};void setSoy(const bool value){soy value;};const bool hasMocha() const{return mocha;};void setMocha(const bool value){mocha value;};const bool hasWhip() const{return whip;};void setWhip(const bool value){whip value;}; };class HouseBlend : public Beverage { public:HouseBlend(){setMilk(true);setSoy(true);setDescription(House Blend);}const float cost() override{return 5.0 Beverage::cost();} };class DarkRoast : public Beverage { public:DarkRoast(){setMilk(true);setWhip(true);setDescription(DarkRoast);}const float cost() override{return 8.0 Beverage::cost();} };class Decaf : public Beverage { public:Decaf(){setMilk(true);setWhip(true);setSoy(true);setDescription(Decaf);}const float cost() override{return 10.0 Beverage::cost();} };int main() {cout 我点了一杯 HouseBlend().getDiscription() 花了 HouseBlend().cost() 元endl;cout 我点了一杯 DarkRoast().getDiscription() 花了 DarkRoast().cost() 元endl;cout 我点了一杯 Decaf().getDiscription() 花了 Decaf().cost() 元endl;return 0; }看起来似乎还行。但是如果将来由于原材料上涨某些调料需要上涨价钱怎么办如果出现了新的调料呢如果顾客想要双倍摩卡的咖啡呢 这些变化都需要我们去直接变更源码。 开放关闭原则类应该对扩展开放对修改关闭。 我们的目标是允许类容易扩展在不修改现有代码的情况下就可以搭配新的行为。这样的设计具有弹性可以应对改变可以接收新的功能来应对改变的需求。 让我们来看看使用装饰者模式是怎么解决问题的 三、代码分析 这里给出相关案例的C代码实现 #include iostream #include string using namespace std;class Beverage { protected:string description unknown Beverage;public:virtual const string getDescription() const{return description;}virtual const double cost() const 0; };class CondimentDecorator : public Beverage { public:virtual const string getDescription() const 0; };class HouseBlend : public Beverage { public:HouseBlend(){description HouseBlend;}const double cost() const override{return 5.00;} };class DarkRoast : public Beverage { public:DarkRoast(){description DarkRoast;}const double cost() const override{return 8.00;} };class Decaf : public Beverage { public:Decaf(){description Decaf;}const double cost() const override{return 10.00;} };class Milk : public CondimentDecorator { public:Beverage* beverage {};Milk(Beverage* beverage){this-beverage beverage;}const string getDescription() const override{return beverage-getDescription() Milk;}const double cost() const override{return beverage-cost() 1.0;} };class Soy : public CondimentDecorator { public:Beverage* beverage {};Soy(Beverage* beverage){this-beverage beverage;}const string getDescription() const override{return beverage-getDescription() Soy;}const double cost() const override{return beverage-cost() 2.0;} };class Mocha : public CondimentDecorator { public:Beverage* beverage {};Mocha(Beverage* beverage){this-beverage beverage;}const string getDescription() const override{return beverage-getDescription() Mocha;}const double cost() const override{return beverage-cost() 2.0;} };class Whip : public CondimentDecorator { public:Beverage* beverage {};Whip(Beverage* beverage){this-beverage beverage;}const string getDescription() const override{return beverage-getDescription() Whip;}const double cost() const override{return beverage-cost() 2.0;} };int main() {Beverage* houseblend new Milk(new Soy(new HouseBlend()));Beverage* darkRoast new Milk(new Soy(new Whip(new DarkRoast())));Beverage* decaf new Milk(new Whip(new Decaf()));// 双倍摩卡Beverage* doubleMochaCoffee new Milk(new Soy(new Mocha(new Mocha(new HouseBlend()))));cout 我点了一杯 houseblend-getDescription() 花了 houseblend-cost() 元 endl;cout 我点了一杯 darkRoast-getDescription() 花了 darkRoast-cost() 元 endl;cout 我点了一杯 decaf-getDescription() 花了 decaf-cost() 元 endl;cout 我点了一杯 doubleMochaCoffee-getDescription() 花了 doubleMochaCoffee-cost() 元 endl;return 0; }
http://www.hkea.cn/news/14404464/

相关文章:

  • 建立自己的网站怎么样做WordPress网站动漫你在
  • 自己做网站 需要服务器吗江苏太仓建设局网站
  • 网域高科学校网站管理系统漏洞外贸业务员怎么开发客户
  • 网站安全检测发生告警后苏州seo专家教优化网站结构
  • 企业搭建pc端网站长兴县城乡建设局网站
  • iis 网站 端口网站伪静态好还是静态好
  • ps做设计想接私活在什么网站如何搭建网上商城
  • 南京快速建设企业网站分布式加载网站的静态
  • 西安做网站的公司地址网站什么意思
  • 网站后台怎么建设河南建设银行处理违章网站
  • 帝国cms建站实例教程企业网站建设费用计入什么科目
  • 网站中文章内图片做超链接梧州论坛红豆社区
  • 购物网站界面 管理员需求分析建筑工程招投标网
  • 做动态表情包的网站传媒网站建设方案
  • 网站推广计划书具体包含哪些基本内容?长春iso认证公司
  • 国家有规定必须做可信网站验证外贸行业建站
  • 厦门协会网站建设百度关键词竞价排名
  • 自己做网站是否要买云主机网站网页设计多少钱
  • 前端和做网站惠州的企业网站建设
  • 设计公司网站图运营推广网站建设
  • 金融企业网站建设公司城乡建设部官方网站
  • ps做网站尺寸多少像素wordpress投票类主题
  • 福州网站关键排名软文推广有哪些平台
  • FPGA毕业设计代做网站软件开发主要工作内容
  • 亚马逊没有网站怎么做seo新乡微网站建设
  • 做一个网站系统多少钱国内代理ip免费
  • 360做网站荆州如何将aaa云主机做网站
  • 论文网站建设的参考文献做网站首先要干什么
  • 河南seo网站策划小程序开发公司简介
  • 微商城手机网站网站视频源码地址