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

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

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

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

总结

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

    推荐阅读
  • 孕早期总是做乱七八糟的梦(总做那种羞羞的梦)

    孕早期总是做乱七八糟的梦朋友莉莉,急冲冲的给我打电话说:自从怀孕后经常做春梦,太无语了,大概是1个或2个星期做一次这样的梦,现在已经6个月了,真的很怕往后面再这样会不好,因为每次都很明显的感觉宫缩似的,肚子会觉得很紧绷,宝宝在里面也不动了(平时我睡不着翻身什么的,宝宝都会被我吵醒似的动一动的。但是值得一提的是,不要把梦境带入现实生活中来,梦境和现实没有半毛钱关系。

  • 聚拢的意思是什么(聚拢的解释)

    接下来我们就一起去研究一下吧!《古今小说·沉小霞相会出师表》:“街上人听得宅里闹炒,也聚拢来。围住大门外闲看。”巴金《家》二八:“他注意到天空的黑云渐渐地聚拢了。”浩然《艳阳天》第十七章:“到了集市附近,人们聚拢到一起,就更加热闹喧哗了。”

  • 自然受孕会有什么感觉(人工受孕是什么回事)

    所谓的人工受孕是和自然受孕相对应的概念,通俗一点说就是通过人工干预的方式来帮助怀孕困难的夫妻怀孕。目前在医学界人工受孕比较常见的方式有两种,分别是人工授精和试管婴儿,它们各有不同的侧重点,各适合因为不同疾病而怀孕困难的夫妻。夏薇主任医师指出,人工授精虽说操作简便,但仅仅适合因男性精子质量差而导致不孕的夫妻,如果女性有输卵管方面的病变,或者男性严重少精甚至有无精症,则不适合进行这种治疗方式。

  • 明日之后怎样获得建筑材料(这个方法很简单)

    跟着小编一起来看一看吧!明日之后怎样获得建筑材料一级强化建筑材料非常的重要,我们需要在建材制作台上制作的方式来获取这些建筑材料,具体操作如下:首先我们要切换到半成品标签下。选中材料之后,点击右方的制作按钮。获得这两个基础材料之后,我们就可以切换到基础配方里,选择一级强化材料进行制作。

  • 白色的西兰花叫什么 白色的西兰花叫什么花

    白色的西兰花叫花椰菜。又称花菜、菜花或椰菜花,花椰菜为十字花科芸苔属一年生植物,又名花菜、椰花菜、甘蓝花、洋花菜、球花甘蓝。原产于地中海东部海岸,约在19世纪初引进中国。花椰菜是一种很受人们欢迎的蔬菜,味道鲜美,营养也很高。维生素C含量非常丰富。

  • 三国之中貂蝉是怎么死的(你了解三国吗貂蝉)

    如用现代科学理论分析,貂蝉应该是死于惊吓。料想当时关羽害怕男女授受不亲,赶忙跑去请示刘备,错过了抢救的最佳时机。赵云死于绣花针常山赵子龙,一身都是胆,被奉为战神的化身。相传,赵云征战沙场多年,竟无一处伤痕。由此推断,赵云可能死于血友病,一种缺乏凝血因子引起血浆凝结时间延长的遗传病。诸葛亮一出祁山,年已七十六岁的王朗自告奋勇随同曹真出战,自称能够把诸葛亮劝降过来。

  • 一个顶俩是什么梗(一个顶俩的意思)

    跟着小编一起来看一看吧!一个顶俩是什么梗玩成语接龙时能够终结比赛的禁句,因为真的没有发音是lia开头的成语。这个梗是出自于QQ的成语接龙红包,“一个顶俩”的俩读作lia而不是liang,是无法继续成语接龙的。所以每当有人发QQ成语接龙红包的时候,一有人发这个红包的时候大伙就跟着发gck(滚出克)。

  • 白冰袖怎么洗(洗冰袖的方法)

    我们一起去了解并探讨一下这个问题吧!白冰袖怎么洗如果衣物上没有顽固污渍,可以根据产品背标说明,将适量洗衣液溶于水中,浸泡衣物15分钟,然后正常洗涤即可。如果衣物上有局部污渍,可以使用“干衣预涂法”:衣物干的时候,将手洗专用洗衣液涂抹在污渍处,5分钟后轻轻揉搓污渍处,再常规清洗衣物。

  • 我已经不知道他们赢了多少金牌了(金牌都抱五块了)

    谷爱凌的第一金和苏翊鸣的金牌都在首钢大跳台产生,所以二人的小项均为大跳台。加上大项目的冠名:谷爱凌以稳健的表现夺得了自由式滑雪女子大跳台冠军;苏翊鸣一鸣惊人拿下单板滑雪男子大跳台冠军。谷爱凌在自由式滑雪大跳台决赛的第三轮,拿出了1620的高难度动作。目前,这是自由式滑雪女子大跳台的世界最高难度。毫无意外拿到了93.25的高分;而第二轮的95.25分更是提前锁定奖牌席位。

  • win7系统快速关机(Win7系统电脑快速关机的操作教程)

    win7系统快速关机Win7系统用户在电脑系统使用率占比是最高的,在使用win7时,很多用户表示在系统使用久了之后,电脑在使用完后关机速度很慢,还有卡顿现象。如图:点击确定2.在“注册表编辑器”中,按序点击打开:HKEY_LOCAL_MECHINE-SYSTEM-CurrentControlSet-Control。