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

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

总结

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

    推荐阅读
  • 羽绒被总是跑毛怎么解决(羽绒被跑毛处理方法)

    羽绒被总是跑毛怎么解决?以下内容大家不妨参考一二希望能帮到您!羽绒被总是跑毛怎么解决首先是在原来的被罩上再增加一个被罩,其实这个方法是最简单的,这样就不会再钻毛了,之后清洗的时候,也只需要清洗第一层就可以了。减少清洗的次数。所以减少清洗的次数也是非常重要的,一般的情况下,最好是一年清洗三四次就可以了,这样不仅可以保护好羽绒被,同时也不会那么脏。

  • 西葫芦为什么是苦的(西葫芦发苦是什么原因)

    我们一起去了解并探讨一下这个问题吧!西葫芦为什么是苦的苦味素含量过高:西葫芦中含有一种名叫“苦味素”的物质,它可以导致西葫芦变苦,若种植时选用的品种较差,种植出来的西葫芦其味道就会比较苦。

  • 钓鱼鱼线怎么选择(教你4个鱼线挑选小常识)

    可以用牙咬的办法测试鱼线的韧性。具体就时用牙咬一下鱼线,如果不是很用力就可以将鱼线咬变形,咬扁这就说明鱼线的韧性是很好的。拉力是重中之重,鱼线的拉力不行,其它的标准就没必要考虑了,直接弃用。“一分钱一分货”也不一定就对。市场上有许多包装精美的,以次充好的鱼线,也有比较便宜的,不是名牌的好线。鱼线的外观,手感。

  • 个性qq网名2022年除夕最新版的女生(好听的女生网名)

    凉城听暖挽梦忆笙歌,今天小编就来说说关于个性qq网名2022年除夕最新版的女生?下面更多详细答案一起来看看吧!

  • 长沙市新文化之都(文化场景和网红品牌激活夜经济)

    长沙市连续3年入选“中国城市夜经济十大影响力城市”,拥有4个国家级夜间文化和旅游消费集聚区。据最新的数据显示,长沙市夜间消费占全天消费比重达52.6%。市政府每年投入近3000万元向长沙音乐厅、梅溪湖大剧院等购买公共服务,推出惠民票价。梅溪湖大剧院演出超过500场、接待80多万观众,长沙音乐厅为市民提供了上千场次视听盛宴,提升夜经济消费品位。长沙国金中心370多家商户中,包含100家首次入湘品牌。

  • 渐变指甲油是怎样的(怎样涂渐变指甲油)

    用棉签蘸卸甲液去除指甲上的指甲油根据理想的长度用指甲刀修剪指甲然后用指甲锉磨平指甲边缘,并给指甲定型用去死皮叉去掉指甲根部的死皮,增加指甲外露的面积,让它看起更修长,我来为大家讲解一下关于渐变指甲油是怎样的?然后用指甲锉磨平指甲边缘,并给指甲定型。底油能起到保护指甲,光滑甲面的作用,方便之后上色。通常底色需要涂两层。另可分两次薄涂,也不要一次性涂上厚厚的一层。

  • 单纯什么意思(单纯词语的含义)

    下面内容希望能帮助到你,我们来一起看看吧!单纯什么意思单纯的字面意思就是简单纯一,不复杂。单纯的好处,也就是自己的精神领域是纯而静的,没有卷入勾心斗角的是非中去。但是单纯的人在社会上很容易被骗,被利用,所以说过于单纯未必是件好事。人最好的境界,不是单纯也不是精明复杂。而是居中,有一颗单纯的内心,而又有一颗玲珑智慧的心。前者愉悦精神领域,后者保证你作为人的生存能力。

  • 2008年北京奥运会圣火是谁点燃的(2008年北京奥运会圣火点燃者介绍)

    2008年北京奥运会圣火是谁点燃的2008年奥运圣火最后点燃的人是体操王子李宁,2008年第29届北京奥运会主火炬手也是最后的火炬手。李宁,壮族,男,生于1963年3月10日,奥运冠军,原中国著名体操队运动员,家乡广西壮族自治区来宾市兴宾区南泗乡人,祖籍广东省佛山市顺德区,曾祖父辈迁至广西谋生,中国著名男子体操运动员。北京奥运会火炬手:北京奥运会火炬手是“和谐之旅”的实践者。

  • 饺子怎么煮不破皮(煮饺子不破皮的技巧)

    饺子怎么煮不破皮?接下来我们就一起去研究一下吧!饺子怎么煮不破皮火候:煮速冻饺子的时候,不宜用大火,它不像是新鲜的水饺,用大火煮也不易破皮。不要过早放,否则易粘在一起,而且放入后,要充分搅拌,这样就不会因为粘在一起而破皮。

  • 舍利子为什么很珍贵(舍利子究竟是什么)

    而另一种舍利子,指的是佛教修行者去世之后留下的遗体,有时是特指骨灰或骨灰中出现的结晶。全身舍利也被称为肉身菩萨。舍利子被认为是佛教修行者通过长年修行,深受戒定慧熏修所得,是修持水平的一个见证,十分难得。此外,也有推测认为牙齿也有可能在燃烧过程中形成舍利子。以此看来,似乎舍利子就是由骨骼形成的可能性十分高。