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

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

总结

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

    推荐阅读
  • 铁锅柴火炖鱼的做法(农家柴锅大铁锅)

    调料:东古一品鲜酱油10克,盐10克,味精6克,白糖10克,醋10克,葱末20克,八角、茴香各5克,姜末20克,色拉油50克,高汤300克。柴锅里放入色拉油,四成热时下八角、茴香、大葱、姜炒出香,放入草鱼小火煎1分钟后烹醋、酱油,加入高汤,加入盐、味精、白糖调味后备用。同时将玉米面加水,揉匀后做成小饼,然后将其贴在锅四周,上盖,小火烧一小时后起锅,先把贴饼子铲下来入盘,再把鱼放入盘内,把锅里的汁倒入鱼身即可。

  • 睫毛长的女生代表什么(睫毛长的女生代表啥)

    睫毛长的女生代表什么睫毛长的人大多长的漂亮。除此之外,这些长睫毛的人在化妆的时候也是可以不用刷眼睫毛的。几乎所有的人都是喜欢自己拥有长睫毛,这样也是可以算作是自己的一个特色。但是对于这样的人,一旦被伤害了之后就会特别的伤心,需要很长的时间才能够走出来那种悲伤的氛围。眼睫毛长的人大多数眼睛比较大。当然,也并非所有眼睫毛长的女生都是拥有大眼睛的,这个是因人而异的。

  • 万华镜5简体中文官网(美万华镜5将出中文版)

    同时《理与迷宫的少女》的制作以及销售情况将直接影响到八宝備仁今后的新系列作品的中文版制作,以及「美少女万华镜」系列早期作品的高清重绘版的制作。《美少女万华镜-理与迷宫的少女-》在昨晚上线了简体中文官网,官网内容包括游戏介绍、登场角色和购买游戏信息等。八宝备仁表示《美少女万华镜-理与迷宫的少女-》中文版正在制作中,日文版会有追加制作的影像,日文版已于5月29日发售。

  • 了解中国结有哪些寓意(中国结的寓意)

    下面内容希望能帮助到你,我们来一起看看吧!了解中国结有哪些寓意中国结不仅具有造型、色彩之美,而且皆因其形意而得名,如盘长结、藻井结、双钱结等,体现了我国古代的文化信仰及浓郁的宗教色彩,体现着人们追求真、善、美的良好的愿望。中国结的编制,要经过编、抽、修的过程。各种结的编法是固定的,但是抽可以决定结体的松紧、耳翼的长短、线条的流畅与工整,可以充分表现出编者的艺术技巧和修养。

  • 为什么会让孩子随父姓(小男孩非要随母姓)

    最近,石家庄虎泉区一名5岁的小男孩终于如愿以偿,将自己随父的姓改成了随母的姓。在征得男孩父母的同意下,民警让夫妻俩写下了给孩子改姓的申请书,并整理相关材料上报上级主管部门批准。5月23日上午,一家人再次到了户籍室,户口本上孩子的姓名已经改为了李某某,孩子终于不会再因为姓名导致的外号难过了。早在去年,广东省教育厅等13个部门联合出台的方案中提到,起侮辱性绰号属于欺凌。

  • 生意经营之道说话技巧(当商家说生意不好做时)

    由俭入奢易,由奢入俭难。所以,个人而言,对大部分人来说,这个世界上,不存在什么快钱。曾国藩在他官运上升时,曾给他弟弟写信说:咱家现在有钱了,但是在老家,你还是要经常借钱。曾国藩这种对借钱的理解,人性的洞察,可以说是入木三分。记得,前豌豆荚CEO王俊煜老师,曾分享过他的一些反思。他说,他曾错误的解读了豌豆荚那几年发展快的原因。

  • 英格兰队和英国队的区别(英格兰队和英国队是一樣的嗎)

    英格兰、苏格兰、威尔士由北向南依次排列组成不列颠岛,北爱尔兰是由位于爱尔兰岛北部的26郡组成。英国是由大不列颠岛上的英格兰、威尔士和苏格兰以及爱尔兰岛东北部的北爱尔兰以及一系列附属岛屿共同组成的一个西欧岛国。作为英联邦元首国、七国集团成员国、北约创始会员国,英国同时也是联合国安全理事会常任理事国之一。

  • soul趋势报告(跟随灵魂找到你)

    Soul产品分析报告是一款不能自定义头像照片以及没有昵称的匿名社交软件,不看颜值,坚持以“灵魂”交友的社交软件。功能是寻找最适合自己的灵魂伴侣。用户量还是稳步上升的,产品依然处于成长期。数据来自艾瑞数据soul的用户性别占比,女性稍高,这是一种非常好的结构。达成soulmate达成soulmate需要不断的进行聊天,陌生人社交软件的通病就是容易出现尬聊以及出现聊天碰到对方雷区被迫结束话题。

  • 泉州鲤城区中小学有停课吗? 泉州市区停课

    泉州‘鲤城区中小学有停课吗?鲤城区中小学、幼儿园、职业学校、民办学校、校外培训机构完成核酸检测后从线下教学转为线上教学,坚持常规教学与非常规教学相结合,确保停课不停教、停课不停学。恢复线下教学时间视具体情况另行通知。关于进一步加强教育系统疫情防控工作的紧急通知全区各级各类学校:当前,国内外疫情防控形势严峻复杂,学生群体社会关注度高,疫情防控风险高、难度大,防疫工作社会影响深远。为有效保障师生健康安

  • 2020晋州私立中兴学校招生简章 晋州中兴学校升学怎么样

    学校位于晋州市魏征公园东边十字路口西南角,现有22个教学班,学生近千名,教师52名,其中本科学历33名,专科学历19名。