高考考试网
当前位置: 首页 高考资讯

23种常用的设计模式(简单学设计模式)

时间:2023-05-24 作者: 小编 阅读量: 1 栏目名: 高考资讯

要说23种设计模式中,工厂模式无疑是最简单的设计模式之一。代替,而不是用工厂模式来消除“if……else……”。事实上这样的实现是不好的实现,虽然能够完成功能需求。还是没有减少,还多创建了一个工厂类,这样真的有必要吗?

要说23种设计模式中,工厂模式无疑是最简单的设计模式之一。虽然工厂模式简单,基本上刚入门的新手都能看得懂,但是能用好也是不简单的,或者说是能够结合业务在实际的项目中使用是非常不易的,因为在实际的开发中,可以使用工厂模式的地方很容易被“if……else……”代替,而不是用工厂模式来消除“if……else……”。举个例子——

假如有一个自动生产饮料果汁的售货机,会根据客户输入的果汁类型来生产果汁给客户的场景,相信大部分人的代码都如下(其中FruitJuice是果汁的父类,这里分别实现了苹果汁AppleJuice、柠檬汁LemonJuice以及菠萝汁PineappleJuice)

输入“LemonJuice”

这样实现是一点问题都没有的,输入“LemonJuice”然后就能得到柠檬汁,完成能够满足当前的需求;

但是如果我们再对未来业务的考虑,这样实现真的好吗?

事实上这样的实现是不好的实现,虽然能够完成功能需求。这里简单指出其实现不足,一是,如果其他类似的场景也是需要生产果汁,但是果汁的种类跟这边的场景不一样,无法重构成一个方法,是不是每次进行实例化前再一次这样“if……else…… ”去判断再实例化对应的实现类;二是从业务角度来说,果汁种类很多,未来要添加新的果汁类型的话,需要再次在业务的代码中添加“if……else……”,如果项目中类似要创建对应果汁类型的代码有多个地方,那必须修改多个地方,不利于维护和扩展。

那我们应该如何优化?

首先我们创建一个类FruitJuiceFactory,专门用来生产果汁的,所有的果汁生产都经过此类的方法来获得

最后业务代码改造成如下:

然后我们对比一下改造前后的差别:

可以看出改造后的代码简洁了不少,但有人可能有疑问,这不是把创建“果汁”对象的“if……else……”代码迁移到FruitJuiceFactory里面去了,代码量和“if……else……”还是没有减少,还多创建了一个工厂类,这样真的有必要吗?

答案是:真的有必要!

首先,如果是在实际的项目中,类似使用“果汁”对象的代码有可能不止这一处,如果我们将生产果汁对象的方法都集中到工厂类中,封装统一使用工厂类来创建管理,这样才符合我们的设计原则,就不用类似再开一个新的果汁饮料实体店,然后再“if……else……”再去判断实现一遍,如果这样代码冗余很多,很不利于维护。

其次,软件开发有一个亘古不变的真理,那就是change(变化),不管一个软件设计得有多好,总需要成长和改变的,否则,软件就会“死亡”!因此,一个软件好的设计原则是,找出软件中可以能需要变化的部分,将它们封装独立出来,不要和那些不需要变化的代码混在一起。在上述的例子中,从业务发展来说,我们明显能够了解到果汁的实现类会有变化,有可能实现类越来越多,比如加入葡萄汁、橙汁等,这个时候我们只需要在变化的工厂类中添加新的实现就好,而不用在一些不需要变动的业务代码去进行改动,而这里的较大可能变化就是果汁实现类,不变的是业务逻辑,所以把果汁对象的创建过程封装起来是一个较好的设计实现。

总结

工厂模式简大部分的应用场景跟上述例子类似,就是传入一个具有识别性的参数,然后产生对应的实现类对象,在实际开发中可能会有一些变种,但核心的思想就是通过一个统一的类方法去管理某类型下对象的创建,实现软件中的“变化”和“不变”高内聚低耦合。

    推荐阅读
  • 羊肉泡膜怎么做(羊肉泡膜做法)

    跟着小编一起来看一看吧!羊肉泡膜怎么做羊肉泡馍的所需材料:熟羊肉、馍、木耳、黄花菜、粉丝、辣椒糊、葱花、香葱末、羊肉汤。把羊肉汤煮熟,把馍切碎放入碗中,加入木耳、黄花、粉丝。把葱花、香菜撒在上面,配上辣椒酱。

  • 减肥低脂水果有哪些(想要减肥的你不妨试试这些低卡水果)

    南瓜饮食是摆脱多余体重而不危害健康的理想方式。此外,西兰花还含有叶黄素,一种与眼睛健康有关的强效抗氧化剂,也可在菠菜中找到。西兰花可以保护免疫系统,预防贫血,有效对抗肝脏疾病。研究表明,西兰花有助于降低胆固醇,因为它含有纤维,因此可以刺激胆汁的生成,从而降低体内的总脂肪水平。苹果纤维会粘附在脂肪分子上,阻止脂肪分子在体内沉积。

  • 11月9日渝北区新增25例确诊病例和109例无症状感染者活动轨迹

    2022年11月9日,渝北区新增报告25例确诊病例和109例无症状感染者。若有轨迹交叉或时空交集,请主动向所在村(社区)报备,并按有关疫情防控要求落实相应措施。若健康码异常请迅速采取措施,红码人员立即主动报告村(社区)并原地等待,黄码和健康码弹窗人员尽快就近进行核酸检测。如出现发热、咳嗽、乏力、嗅觉味觉减退等不适症状,请佩戴医用口罩及时前往就近的发热门诊就诊。

  • 如何穿高跟鞋优雅(气质女王教学篇之)

    真皮鱼嘴凉鞋硬朗的轮廓,是简约优雅的最佳选择。时尚镂空鞋面,透气舒适,不用担心鞋子不透气,让你拥有美丽同时也收获健康。新款鱼嘴鞋加厚乳胶垫,缓解久走疲劳,优雅蝴蝶结!性感鱼嘴完美细跟,超完美版型的美鞋,舒适度和时尚度都是毋庸置疑的。鱼嘴高跟凉鞋镂空鱼嘴的设计,突显时尚的同时又保证透气舒适,加厚的软质鞋底,走路不累。性感防水台细跟高跟鞋性感的细跟,优雅的气质,鱼嘴鞋讲究的就是优雅气质。

  • opporeno2安兔兔跑分(安兔兔次旗舰性能榜单出炉)

    6月份安兔兔Android次旗舰手机性能排行方面,OPPOReno8Pro以822915的平均跑分获得了榜单第一名。对于OPPOReno8Pro这台手机,许多消费者都表示其在性能、流畅度、温控等各方面都表现出色,感觉非常不错。如此来看,OPPOReno8Pro获得冠军也可以说是实至名归。除了OPPOReno8Pro,榜单上TOP5还包括了RedmiK50、RedmiNote11TPro、vivoS15Pro以及realmeGTNeo3;这四台机型的平均跑分均超过了81万。

  • 母乳性黄疸能继续喂奶吗 母乳黄疸可以继续喂奶吗

    新生宝宝在母乳喂养期间大多会患上一种叫母乳性黄疸的症状,出现这个症状的时候,不少新妈妈都会担心,就停止了喂养母乳,母乳性黄疸能继续喂奶吗?

  • 眉心长痘痘是什么原因 眉心长痘痘是什么原因怎么调理

    体内激素分泌失衡,使皮肤长痘。激素分泌失衡也会间接造成皮脂分泌过于旺盛,滋生痘痘。

  • 紫米芋泥八宝饭做法(紫米芋泥八宝饭的做法)

    紫米芋泥八宝饭做法食材:血糯米300g、猪油适量、芋头120g、紫米芋泥30g、牛奶20g、炼奶20g、白糖10g、干果适量、红糖20g。血糯米浸泡4小时,拌入红糖备用。取出后加入牛奶、炼奶、少量白糖压成泥。用一个大圆碗,涂上一层猪油,碗底铺红枣、葡萄干、坚果装饰,压上一层血糯米。放入西门子蒸烤一体机,设置功能:选择蒸制模式放置第二层,蒸2小时即可。取出倒扣盘中,好吃又好看的紫米芋泥八宝饭就做好啦。

  • 魔兽怀旧服tbc服务器状态(魔兽怀旧服TBC上线后)

    魔兽世界怀旧服“全新”的70级版本-燃烧的远征前夕版本,已经上线。因此在5月20日TBC前夕上线后,怀旧服TBC服务器群组出现了久违了的排队现象。究其原因,囧王者认为无非以下几点:第一,魔兽世界,是一个网游。但是在TBC前夕上线后,跑得最快的往往就是这些人。不用说三个月,能熬过前夕都不错了,等TBC一开,估计主城里就只剩下NPC和真硬核玩家了。

  • 那些年我们一起追过的女孩经典台词(那些年我们一起追过的女孩经典台词介绍)

    我们一起去了解并探讨一下这个问题吧!那些年我们一起追过的女孩经典台词人生本来就有很多事是徒劳无功的,但是我们还是依然要经历。“你想知道答案吗?我现在就可以告诉你。”其实,女孩早已在孔明灯的另一面写下:好。更早在高中毕业典礼那天,阳光很好,她和自己的闺蜜坐在操场边看着这群男生嬉笑打闹,突然转身在闺蜜耳边说:“如果,柯景腾和我告白,我会很高兴。”“柯景腾,你真的很幼稚。”