范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

设计模式8工厂方法模式

  回顾简单工厂模式,在工厂类里判断到底需要创建哪一个类来计算结果,如果要加一个类的话,我们需要在工厂类里来增加一个if判断;
  修改了原有的类,违背了开放封闭原则。
  简单工厂模式代码 #include using namespace std;  class Calc { public:     virtual double calc(double num1, double num2) {         return 0;     }; };  class AddCalc : public Calc { public:     double calc(double num1, double num2) override {         return num1 + num2;     } };  class SubCalc : public Calc { public:     double calc(double num1, double num2) override {         return num1 - num2;     } };  class MulCalc : public Calc { public:     double calc(double num1, double num2) override {         return num1 * num2;     } };  class DivCalc : public Calc { public:     double calc(double num1, double num2) override {         if (num2 == 0) {             cout << "除数不能为0!" << endl;             return 0;         }         return num1 / num2;     } };  class CalcFactory { public:     static Calc* CreateCalc(const char op) {         if (op == "+") {             return new AddCalc;          }         else if (op == "-") {             return new SubCalc;          }         else if (op == "*") {             return new MulCalc;          }         else if (op == "/") {             return new DivCalc;         }         else {             throw;         }     } };   int main(int argc, char const* argv[]) {     char op;     Calc *calc;     double num1, num2, result;     cout << "请输入数字A: " << endl;     cin >> num1;      cout << "请输入运算符(+, -, *, /):" << endl;     cin >> op;      cout << "请输入数字B: " << endl;     cin >> num2;      calc = CalcFactory::CreateCalc(op);     result = calc->calc(num1, num2);      cout << "两个数的运算结果为: " << result << endl;     return 0; }
  下面我们将学习工厂方法模式,增加新的计算类,不需要修改原来的老代码,就能增加一个新类。
  工厂方法模式代码 #include using namespace std;  class Calc { public:     virtual double calc(double num1, double num2) {         return 0;     }; };  class AddCalc : public Calc { public:     double calc(double num1, double num2) override {         return num1 + num2;     } };  class SubCalc : public Calc { public:     double calc(double num1, double num2) override {         return num1 - num2;     } };  class MulCalc : public Calc { public:     double calc(double num1, double num2) override {         return num1 * num2;     } };  class DivCalc : public Calc { public:     double calc(double num1, double num2) override {         if (num2 == 0) {             cout << "除数不能为0!" << endl;             return 0;         }         return num1 / num2;     } };  class CalcFactory { public:     virtual Calc* CreateCalc() {         return new Calc;     } };  class AddCalcFactory : public CalcFactory { public:     virtual Calc* CreateCalc() {         return new AddCalc;     } };  class SubCalcFactory : public CalcFactory { public:     virtual Calc* CreateCalc() {         return new SubCalc;     } };  class MulCalcFactory : public CalcFactory { public:     virtual Calc* CreateCalc() {         return new MulCalc;     } };  class DivCalcFactory : public CalcFactory { public:     virtual Calc* CreateCalc() {         return new DivCalc;     } };   int main(int argc, char const* argv[]) {     char op;     Calc *calc;     double num1, num2, result;     cout << "请输入数字A: " << endl;     cin >> num1;      cout << "请输入运算符(+, -, *, /):" << endl;     cin >> op;      cout << "请输入数字B: " << endl;     cin >> num2;      CalcFactory *factory;     if (op == "+") {         factory = new AddCalcFactory;      }     else if (op == "-") {         factory = new SubCalcFactory;      }     else if (op == "*") {         factory = new MulCalcFactory;      }     else if (op == "/") {         factory = new DivCalcFactory;     }     else {         throw;     }      calc = factory->CreateCalc();     result = calc->calc(num1, num2);     cout << "两个数的运算结果为: " << result << endl;     return 0; }
  最重要的一点就是把判断运算符的逻辑从设计里挪到了调用的地方,从而在新增运算符时可以不用动原来写好的类,遵循了开放关闭原则。
  工厂方法模式
  定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到子类。
  觉得不错的话可以点个赞哦,关注我,和我一起学习。

社区团购资本家对零售商的赶尽杀绝对于大家来说社区团购是一件好事,事实也是如此,社区团购确实方便了大家的生活,也符合时代的需要和发展。但其中蕴含的巨大市场也让资本家们兴奋不已,为了抢夺市场,几大公司可谓是争得头破血蜜雪冰城广告火爆后的巨大推手相信大家最近一定被蜜雪冰城的广告神曲给洗脑了吧?魔性的广告词让大家欲罢不能。你爱我,我爱你,蜜雪冰城甜蜜蜜这几句歌词不仅在大街小巷,甚至在网络上都形成一股潮流,让蜜雪冰城闪耀出圈。5。8Ghz频段,一机多用,达尔优A710无线游戏耳机5。8Ghz无线USB3。5mm三种连接方式连续使用15小时的高续航出色的声场及声音细节表现两种材质耳罩垫圈达尔优近期新推出的A710无线游戏耳机,性能拉满,一机足以统领所有游戏设为什么国家重拳出击对ampampquot虎牙斗鱼ampampquot合并说不7月10日,国家市场监督管理总局网站,市场监管总局依法禁止虎牙公司与斗鱼国际控股有限公司合并。对于行业里的佼佼者,斗鱼和虎牙的合并无疑会垄断直播行业大部分市场,其他平台毫无还手之力让美国航母舰队退后一百海里的男人黄大年当初黄大年回国时,美军正在演习,得知他回国后立即让舰队退后一百海里就是这样的传奇人物,中国的英雄黄大年。其实回国时的黄大年已经在英国生活了18年,早就是国际顶尖人才,是航空地滴滴出行真的要凉了吗近日,滴滴出行App在应用商店下架,原因是因为关乎国家安全,那么风靡一时的滴滴出什么事了?滴滴在美低调上市,简直就是神不知鬼不觉,可是后被曝出董事会藏有前美国军官,事情一下就大了,15。98万起售,长安CX30EV上市,纯电续航450公里日前,长安马自达CX30EV正式上市,新车共推出三款车型,补贴之后的售价区间为15。9820。18万,新车属于长安马自达旗下首款纯电动SUV车型。外观方面,马自达CX30EV基本延26。78万起售,长城炮旅装版上市,野营利器!日前,我们从长城汽车官方获悉,长城炮旅装版在2021阿拉善英雄会上正式上市,新车基于长城炮普通版车型打造,共推出三款车型,售价区间为26。7828。98万。外观方面,长城炮旅装版的定位高于RAV4荣放,一汽丰田凌放HARRIER将于10月16日开启预售今年,一汽丰田在国内汽车市场动作频出,不仅成立了高端子品牌皇冠,并随即推出皇冠陆放,最近又曝光了全新大5座中型SUV凌放HARRIER,新车定位高于RAV4荣放,并将于10月16日起售价27。58万的豪华中大型SUV,解析2022款红旗HS7近日,2022款红旗HS7正式上市,作为一款豪华中大型SUV,新款红旗HS7的价格区间为27。5845。98万元,和同级车型相比,这个定价十分有诚意。外观方面,2022款红旗HS7补贴后售价19。98万,比亚迪宋PLUSDMiAWD上市,零百加速5。9秒日前,我们从比亚迪官方获悉,比亚迪宋PLUSDMiAWD车型正式上市,进一步扩充了宋PLUS车系的规模,新车补贴后的售价为19。98万。外观方面,宋PLUSDMiAWD车型采用了现
特别的礼物送给特别的人,艺术家的礼物,不肤浅近日想送一份礼物给朋友,以感恩朋友一直对自己支持与厚爱,礼物不想选一些食物或电子产品之类的东西,因为觉得有点肤浅,不能表达自己对朋友深深的感恩,毕竟现在社会已不缺衣短食,一份既有深随身WiFi干不了的活蒲公英解决了,小侄子说要借去打王者最近因为工作的特殊性性掌握了如何快速开启临时会议的技巧,就是随时能完成一场移动会议的布置,从接到会议通知后12小时内甚至4小时内租到一个适合开会的场地并且把投影需要的资源全部搞定。vivo和蔡司成为全球影像战略伙伴,又一次影像跨界合作近日,vivo蔡司全球影像战略合作沟通会召开,一时间吸引了众多数码爱好者与摄影爱好者的关注。作为拥有百年底蕴的光学产品制造商,蔡司在镜头领域有着举足轻重的地位。而在手机影像领域,v小米11劲爆来袭,搭载最贵屏幕的旗舰机锁门员,你心动了吗?12月28日年度最重磅的一场手机发布会刚刚结束,那就是小米11的发布会。作为目前全球第三大手机厂商的小米,发布了最新一代的当家旗舰小米11。小米11这次主打屏幕的优越性,当然,这不中端竞争激烈,RedmiNote9Pro或成最大竞争者Redmi最近举行了新品发布会,发布了Note9系列新品,关注发布会的米粉们应该都对总裁卢伟冰的脱口秀印象深刻,他甚至调侃小米为友商。不得不说,近年来的手机市场确实竞争激烈,Not跟随vivoS7的镜头,一起探索神秘的丛林秘境众所周知,有着轻薄自拍旗舰之称的vivoS7在自拍方面的表现十分出色,其实作为一款实力出众的机型,其在后置影像方面也有着非常不错的表现。2020年11月24日,vivoS7就联合摄裂缝已经撕开,中国千亿家具产地主动出击,欲打破国外品牌壁垒时常关注家具行业的人,相信都或多或少听过南康这个名字。作为中国实木家具之都,南康集聚了全国70的进口橡胶木材。每年从赣州国际陆港出口的家具远销全球100多个国家和地区,是全国最大的微信解封怎么解?微信解封辅助验证需要什么条件?一微信解封操作步骤1微信账号被封后,登录微信时,系统会提示该微信账号因涉嫌(某种原因)被执行封号,可自助解封处罚,如果希望继续正常使用微信,请轻触确定申请解封。点击我已了解,申请解如何防止微信被封号?避免微信封号的20个方法1微信上不要传播违规违法信息,避免其它微信用户投诉。2微信号不要购买,因为号贩子卖的微信号质量一般都有问题。3微信不要频繁主动加人,尽量让别人来加我们的微信。4尽量做到一机一卡一号你的客户是谁?如何快速找到精准客户(二)客户是有高决策权的人。什么是做决策的人?比如小孩虽然想买玩具,但是需要家长付钱,所以家长是做决策的人。一个没有决策权的人,虽然你和他谈的很好,但是他不能决定是否购买,所以他不是你的微信注册注意事项20条,微信新账号怎么注册才好?1手机号不要用170171这些虚拟号段也不要用149开头的号码最好选择130137189173等这些传统号段。2手机卡一定要用实名卡,不要用免实名卡0月租卡,绑定后不要更改。3登录