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

设计模式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; }
  最重要的一点就是把判断运算符的逻辑从设计里挪到了调用的地方,从而在新增运算符时可以不用动原来写好的类,遵循了开放关闭原则。
  工厂方法模式
  定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到子类。
  觉得不错的话可以点个赞哦,关注我,和我一起学习。

电竞座椅套装好物种草做你游戏时的左膀右臂,打游戏自带Buff普通人距离专业电竞选手的差距有多远?除了日复一日的练习以外,电竞选手也拥有了更好的游戏设备及装备,相比于高能游戏玩家,我们普通人想要获得绝佳的电竞体验也得配齐设备,就好比打游戏时需黑鲨3S评测顶级配置高颜值外观,永无止境的满足游戏玩家如果说以往的黑鲨是钢铁硬汉,那么这次的黑鲨3S则多了一丝铁汉柔情,大家好我是科技Daily,今天我们从配置设计游戏体验三个维度,一起来聊聊腾讯黑鲨3S。先聊配置,作为游戏手机黑鲨3贵阳标致408欢迎垂询,降价15。04要现车?要省钱?要省心?要优惠?要豪礼?今天它们都来了!贵州钟裕东风标致店标致408限时促销,10月30日10月31日,购车优惠1。8万元,欢迎您到店开启更多惊喜福利,店铺地址新添贵阳标致5008最高优惠2。0万元,欢迎到店赏车要现车?要省钱?要省心?要优惠?要豪礼?今天它们都来了!贵州钟裕东风标致店标致5008限时促销,10。3010。31,限时特惠2。0万元,欢迎您到店开启更多惊喜福利,店铺地址新添大幸福有礼,贵阳标致4008降价1。6万元心心念念的标致4008,等了这么久终于有优惠了,小编打听到贵州钟裕东风标致店10月30日10月31日限时特惠1。6万元,这么好的机会朋友们是不是也和小编一样迫不及待的想到店去感受一贵阳标致508L让利促销,最高优惠8。14,欢迎垂询汽车报价早知道贵州钟裕东风标致店,标致508L限时特惠大酬宾,截止到10月31日降价1。3万元,有购车意向的朋友不妨亲自去试驾一下,店铺地址新添大道南段243号促销时间2021年1贵阳标致508LPHEV热销中,最高优惠4。17本周标致508LPHEV最新报价贵州钟裕东风标致店即日起到10月31日限时促销,直降4。17,如此优惠的降幅,大家可千万不要错过,店铺地址新添大道南段243号促销时间2021年10贵阳标致508L让利促销,最高优惠1。3万元,欢迎垂询汽车报价早知道贵州钟裕东风标致店,标致508L限时特惠大酬宾,截止到10月29日限时特惠1。3万元,有购车意向的朋友不妨亲自去试驾一下,店铺地址新添大道南段243号促销时间2021标致5008超大乘车空间安排!5月31日,三孩生育政策正式发布,为积极应对人口老龄化,国家正式实施一对夫妻可以生育三个子女政策及配套支持措施。这意味90后肩上的责任又多了一重。上有四老下有三孩,压力大是不假。但贵阳标致508LPHEV降价4。17本周最新车市行情,标致508LPHEV,贵州钟裕东风标致店直降4。1711。0111。02,观望标致508LPHEV的朋友,机会难得,不要犹豫,不要错过下手好机会促销时间2021年贵阳标致4008PHEV购车优惠0。9万元,欢迎到店赏车贵州钟裕东风标致店标致4008PHEV,现车供应,火热销售中,为回馈广大用户,10月30日10月31日最高优惠3。6,轻松圆您购车梦促销时间2021年10月30日至2021年10月
我的日记老妈篇2021年7月16日,吃过晚饭,碗筷洗涮完毕,觉得无事可做,就提前开始了今天的日记。进入伏天后,昼夜温差小了,空气的湿度大了,一天下来,身上总是潮乎乎儿的,要是睡前不冲个澡就无法上我的日记老妈篇2021年7月15日,早上5点多点起床,开始了第二天的老妈管护工作。头天晚上把米洗完下锅预约好了,早上用几天前吃剩的扣肉炖个茄子,每人再吃一个煮鸡蛋这就是我和老妈的早餐,比较简单,我的日记老妈篇2021年7月14日,今天开始,我要正式接手一份新的工作一一24小时全天候看管我的老妈。说起这件事的缘由(可能是小脑委缩记忆变差的缘故,老妈走丢了18个小时,非常揪心的18个小时,2021游戏党的福音HAKIISWIFT如今王者荣耀,刺激战场等诸多竞技手游已经成为了年轻一代的不可或缺的娱乐游戏。然而想要更好的体验游戏世界除了要有一块高性能的手机之外,当然你还需要一款专业的游戏耳机来为你提供更好的游专为游戏打造西圣Olaf无线耳机相信手游已经占据了现在大部分年轻人娱乐游戏的大市场,已经代替了网游跟PC的时代。竞技类手游时代更是火热,如果你想在吃鸡王者等竞技类手游里快人一步,拥有更快延时更低的游戏体验那么今天全球领先2023年量产长城汽车智慧线控底盘技术首次公开10月28日,长城汽车咖啡智能2。0智慧线控底盘公开课正式线上开讲。据了解,长城汽车智慧线控底盘是以L4级及以上自动驾驶的目标来搭建的技术平台,于今年6月长城汽车第8届科技节上全球图像显示高要求,工业一体机分辨率是医疗彩超设备选择第一要素?互联网信息时代的发展,让许多行业发生了翻天覆地的改变。其中,医疗行业作为国民经济重要支柱之一,科技发展带来了智慧医疗的全新征程,全面建设智慧医疗体系成为当前各大医院的共同目标。通过分辨率要求19201080,智慧港口对工业安卓一体机为何有这需求?港口是水陆交通的集结点和枢纽处,是工农业产品和外贸进出口物资的集散地,也是船舶停泊装卸货物上下旅客补充给养的重要场地,在经济发展中占据重要位置。随着信息技术的发展,以信息物理系统为当手机厂商开始做电竞游戏手机时,请思考,你真的需要吗?智能手机市场的发展趋势早已多样化,同时也划分成了各式不同种类的区域,手机不再只作为打电话聊天上网的通讯工具,可玩性和专业性被大大提高。例如较常见的拍照手机音乐手机等等,这类特定主打配备320Hz采样率双游戏肩键,红魔5S即将登陆骁龙865Plus阵营7月21日上午,红魔游戏手机官方在微博中宣布,新品红魔5S定档7月28日风暴降临,冰封银翼,比快更快!散热一直是红魔手机值得骄傲的优势点,虽然一直处于行业领先的散热技术,但红魔5S2020世界人工智能大会,AI虚拟家园是什么操作?2020年7月9日,2020世界人工智能大会云端峰会在上海正式启幕!峰会围绕智联世界共同家园的主题,聚焦AI技术趋势AI赋能经济AI温暖家园三大议题。由于疫情影响,本次大会线上部分