随笔分类 -  设计模式

摘要:通过《23种设计模式全面解析》教程,我们已经学习完了经典的 23 种设计模式。下面总结一下这 23 种设计模式,以方便小伙伴们日后复习和查阅。 分类设计模式简述一句话归纳目的生活案例 创建型设计模式(简单来说就是用来创建对象的) 工厂模式(Factory Pattern) 不同条件下创建不同实例 产 阅读全文
posted @ 2021-10-26 11:26 Chen洋 阅读(76) 评论(0) 推荐(0) 编辑
摘要:在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的语言,那么这些问题实例将是该语言的一些句子,这样就可以用“编译原理”中的解释器模式来实现了。虽然使用解释器模式的实例不是很多,但对于满足以上特点,且对运行效率要求不是很高的应用实例,如果用解释器模式来实现 阅读全文
posted @ 2021-10-26 11:23 Chen洋 阅读(79) 评论(0) 推荐(0) 编辑
摘要:每个人都有犯错误的时候,都希望有种“后悔药”能弥补自己的过失,让自己重新开始,但现实是残酷的。在计算机应用中,客户同样会常常犯错误,能否提供“后悔药”给他们呢?当然是可以的,而且是有必要的。这个功能由“备忘录模式”来实现。其实很多应用软件都提供了这项功能,如 Word、记事本、Photoshop、E 阅读全文
posted @ 2021-10-26 11:10 Chen洋 阅读(82) 评论(0) 推荐(0) 编辑
摘要:在现实生活中,有些集合对象存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式。例如,公园中存在多个景点,也存在多个游客,不同的游客对同一个景点的评价可能不同;医院医生开的处方单中包含多种药元素,査看它的划价员和药房工作人员对它的处理方式也不同,划价员根据处方单上面的药品名和数量进行划价, 阅读全文
posted @ 2021-10-26 10:40 Chen洋 阅读(224) 评论(0) 推荐(0) 编辑
摘要:在现实生活以及程序设计中,经常要访问一个聚合对象中的各个元素,如“数据结构”中的链表遍历,通常的做法是将链表的创建和遍历都放在同一个类中,但这种方式不利于程序的扩展,如果要更换遍历方法就必须修改程序源代码,这违背了 “开闭原则”。既然将遍历方法封装在聚合类中不可取,那么聚合类中不提供遍历方法,将遍历 阅读全文
posted @ 2021-10-25 16:39 Chen洋 阅读(54) 评论(0) 推荐(0) 编辑
摘要:在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,每个人必须记住他(她)所有朋友的电话;而且,朋友中如果有人的电话修改了,他(她)必须让其他所有的朋友一起修改,这叫作“牵一发而动全身”,非常复杂。如果把这种“网状结 阅读全文
posted @ 2021-10-25 16:27 Chen洋 阅读(111) 评论(0) 推荐(0) 编辑
摘要:在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有,当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。这样的例子还有很多,例如,股票价格与股民、微信公众号与微信用户、气象 阅读全文
posted @ 2021-10-25 11:43 Chen洋 阅读(308) 评论(0) 推荐(0) 编辑
摘要:在软件开发过程中,应用程序中的部分对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。当有状态的对象与外部事件产生互动时,其内部状态就会发生改变,从而使其行为也发生改变。如人都有高兴和伤心的时候,不同的情绪有不同的行为,当然外界 阅读全文
posted @ 2021-10-25 11:26 Chen洋 阅读(102) 评论(0) 推荐(0) 编辑
摘要:在现实生活中,一个事件需要经过多个对象处理是很常见的场景。例如,采购审批流程、请假流程等。公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据需要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这无疑增加了难度。在计 阅读全文
posted @ 2021-10-25 11:17 Chen洋 阅读(183) 评论(0) 推荐(0) 编辑
摘要:在软件开发系统中,“方法的请求者”与“方法的实现者”之间经常存在紧密的耦合关系,这不利于软件功能的扩展与维护。例如,想对方法进行“撤销、重做、记录”等处理都很不方便,因此“如何将方法的请求者与实现者解耦?”变得很重要,命令模式就能很好地解决这个问题。在现实生活中,命令模式的例子也很多。比如看电视时, 阅读全文
posted @ 2021-10-22 15:57 Chen洋 阅读(125) 评论(0) 推荐(0) 编辑
摘要:在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该 阅读全文
posted @ 2021-10-22 15:35 Chen洋 阅读(125) 评论(0) 推荐(0) 编辑
摘要:在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和 阅读全文
posted @ 2021-10-22 14:53 Chen洋 阅读(63) 评论(0) 推荐(0) 编辑
摘要:在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣服与衣柜、以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如,文件系统中的文件与文件夹、窗体程序中的简单控件与容器控件等。对这些简单对象与复合对象的处理,如果用组合模式来 阅读全文
posted @ 2021-10-22 14:40 Chen洋 阅读(96) 评论(0) 推荐(0) 编辑
摘要:在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题。创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈。例如,围棋和五子棋中的黑白棋子,图像中的坐标点或颜色,局域网中的路由器、交换机和集线器,教室里的桌子和凳子等。这些对象有很多相似的地方,如果能把它们相同的部分提 阅读全文
posted @ 2021-10-22 14:28 Chen洋 阅读(74) 评论(0) 推荐(0) 编辑
摘要:在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”, 阅读全文
posted @ 2021-10-22 14:08 Chen洋 阅读(447) 评论(0) 推荐(0) 编辑
摘要:上班族大多都有睡懒觉的习惯,每天早上上班时间都很紧张,于是很多人为了多睡一会,就会用方便的方式解决早餐问题。有些人早餐可能会吃煎饼,煎饼中可以加鸡蛋,也可以加香肠,但是不管怎么“加码”,都还是一个煎饼。在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等,都是装饰器模式 阅读全文
posted @ 2021-10-22 13:46 Chen洋 阅读(82) 评论(0) 推荐(0) 编辑
摘要:在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难。当然,这样的例子还有很多,如不同颜色和字体 阅读全文
posted @ 2021-10-22 13:37 Chen洋 阅读(238) 评论(0) 推荐(0) 编辑
摘要:在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。在软件设计中也可能出现:需要开发的具有某种业务功能的组件 阅读全文
posted @ 2021-10-22 10:51 Chen洋 阅读(169) 评论(0) 推荐(0) 编辑
摘要:在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不一定要去火车站买,可以通过 12306 网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。在软件设计中,使用代理模式的例子也很多,例如,要访问 阅读全文
posted @ 2021-10-22 10:35 Chen洋 阅读(86) 评论(0) 推荐(0) 编辑
摘要:在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由 CPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然 阅读全文
posted @ 2021-10-22 09:59 Chen洋 阅读(293) 评论(0) 推荐(0) 编辑