设计模式
文章平均质量分 92
d303577562
这个作者很懒,什么都没留下…
展开
-
设计模式总结
23种设计模式总结 分类 设计模式 简述 一句话归纳 目的 生活案例 开发场景 主要角色 源码应用 创建型设计模式(创建对象) 工厂模式 Factory 不同条件下创建不同实例 产品标准化 封装产品细节 实体工厂 版本切换 工厂、产品 Calendar、Connection 单例模式(Singl原创 2021-07-29 21:51:41 · 118 阅读 · 0 评论 -
解析器模式详解
1.简介在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的语言,那么这些问题实例将是改语言的一些句子,这样就可以用“编译原理”中的解释器模式来实现了。虽然使用解释器模式的实例不是很多,但对于满足以上特点,且对运行效率不是很高的应用实例,如果用解释器模式来实现,其效果是非常好的。2.定义解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解释器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例原创 2021-07-23 21:11:55 · 757 阅读 · 0 评论 -
备忘录模式详解
1.简介每个人都有犯错的时候,都希望有种“后悔药”能弥补自己的过失,让自己重新开始,但现实是残酷的。在计算机应用中,客户同样会常常犯错误,能否提供“后悔药”给他们呢?当然是可以的,而且是有必要的。这个功能由“备忘录模式”来实现。其实很多应用软件都提供了这项功能,如Word、记事本、Photoshop、Eclipse等软件在编辑时按Ctrl+Z组合键时能撤销当前操作,使文档恢复到之前的状态;还有在IE中的后退键、数据库事务管理中的回滚操作、玩游戏时的中间结果存档功能、数据库与操作系统的备份操作、棋类游戏中原创 2021-07-23 11:02:40 · 345 阅读 · 2 评论 -
访问者模式详解
1.简介在现实生活中,有些集合对象存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式。例如,公园中存在多个景点,也存在多个游客,不同的游客对同一个景点的评价可能不同;医院医生开的处方单中包含多种药元素,查看它的划价员和药房工作人员对它的处理方式也不同,划价员根据处方单上面的药品和数量进行划分,药房工作人员根据处方单的内容进行抓药。这样的例子还有很多,例如,电影或电视剧中的人物角色,不同的观众对他们的评价也不同;还有顾客在商场购物时放在“购物车”中的商品,顾客主要关心所选商品的性价比,而收银员原创 2021-07-21 20:41:23 · 1293 阅读 · 0 评论 -
迭代器模式详解
1.简介在现实生活以及程序设计中,经常要访问一个聚合对象中的各个元素,如“数据结构”中的链表遍历,通常的做法是将链表的创建和遍历都放在同一个类中,但这种方式不利于程序的扩展,如果要更换遍历方式就必须修改程序源代码,这违背了“开闭原则”。既然将遍历方法封装在聚合类中不可取,那么聚合类中不提供遍历方法,将遍历方法由用户自己实现是否可行呢?答案是同样不可取,因为这种方式会存在两个缺点:暴露了聚合类的内部表示,使其数据不安全;增加客户的负担。“迭代器模式”能较好地客服以上缺点,它在客户访问类和聚合类之原创 2021-07-18 12:40:28 · 196 阅读 · 0 评论 -
中介者模式详解
1.简介在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,每个人必须记住他(她)所有朋友的电话;而且,朋友中如果有人的电话修改了,他(她)必须让其他所有的朋友一起修改,这叫作“牵一发而动全身”,非常复杂。如果把这种“网状结构”改为“星形结构”的话,将大大降低他们之间的“耦合性”,这时只要找一个“中介者”就可以了。如前面所说的“每个人必须记住所有朋友的电话”的问题,只要在网上建立一个每个朋友都可以访问的“通信录”就解决了原创 2021-07-15 17:55:02 · 198 阅读 · 1 评论 -
观察者模式详解
1.简介在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有,当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。这样的例子还有很多,例如,股票价格与股民、微信公众号和微信用户、气象局的天气预报与听众、小偷与警察等。在软件世界也是这样,例如,Excel中的数据与折线图、饼状图、柱状图之间的关系;MVC模式中的模板与视图的关系;事件模型中的事件源与事件处理者。所有这些,如果用观察者原创 2021-07-13 20:36:50 · 375 阅读 · 1 评论 -
状态模式详解
1.简介在软件开发过程中,应用程序中的部分对象可能会根据不同的情况作出不同的行为,我们把这些对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。当有状态的对象与外部事件产生互动时,其内部状态就会发生改变,从而使其行为也发生改变。如人都有高兴和伤心的时候,不同的情绪有不同的行为,当然外界也会影响其情绪变化。对这种有状态的对象编程,传统的解决方案是:将这些所有可能发生的情况全都考虑到,然后使用if/else或switch-case语句来做状态判断,在进行不同情况的处理。但是显然这种做法原创 2021-07-09 19:42:22 · 1367 阅读 · 0 评论 -
责任链模式详解
1.简介在现实生活中,一个事件需要经过多个对象处理是很常见的场景。例如,采购审批流程、请假流程等。公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据需要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这无疑增加了难度。在计算机软硬件中也有相关例子,如总线网中数据报传送,每台计算机根据目标地址是否和自己的地址相同来决定是否接收,还有异常处理中,处理程序根据异常的类型决定自己是否处理该异常;还有Struts2的拦截器、JS原创 2021-07-08 13:38:50 · 297 阅读 · 2 评论 -
命令模式详解
1.简介在软件开发系统中,“方法的请求者”和“方法的实现者”之间经常存在紧密的耦合关系,这不利于软件功能的扩展和维护。例如,想对方法进行“撤销、重做、记录”等处理都很不方便。因此,“如何将方法的请求者与实现者解耦?”变得很重要,命令模式就能很好地解决这个问题。在现实生活中,命令模式的例子也很多。比如看电视时,我们只需要轻轻一按遥控器就能完成频道的切换,这就是命令模式,将换台请求和换台处理完全解耦了。电视遥控器(命令发送者)通过按钮(具体命令)来遥控电视机(命令接收者)。再比如,我们去餐厅吃饭,菜单不是原创 2021-07-06 18:11:06 · 170 阅读 · 2 评论 -
策略模式详解
1.简介在现实生活中长长遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超时促销可以采用打折、送商品、送积分等方法。在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。如果使用多重条件转移语句实现(即硬编码),不但使条件语句变得很复杂,而且增加。删除或更换算法要修改原代码,不易维护,违背开闭原则。如原创 2021-07-04 14:12:12 · 4505 阅读 · 2 评论 -
模板方法模式详解
1.简介在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如:去银行办理业务一般要经过以下4个流程:区号、排队、办理具体业务、对银行工作人员进行评分等。其中取号、排队和对银行工作人员进行评分的业务是对每个客户都是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。这样的例子在生活中还有很多,例如:一个人每天会起床、原创 2021-07-01 21:33:25 · 265 阅读 · 1 评论 -
组合模式详解
1.简介在现实生活中,存在很多“部分-整体”的关系,例如:大学中的部门与学园、总公司的部门与分公司、学习用品中的书与书包、生活用品中的衣服与衣柜等。在软件开发中也是这样,例如文件系统中文件与文件夹等。对于这些简单对象与符合对象的处理,如果用组合模式来实现会很方便。2.定义组合(Composite Pattern)模式的定义:有时又叫做整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系,使用户对单个对象和组合对象具有一致的访问性,属于结构型设计原创 2021-06-29 21:35:06 · 411 阅读 · 1 评论 -
适配器模式详解
1.简介在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如:讲中文的人和讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的SD内存卡时需要一个读卡器等。在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但是他们与当前系统的接口规范不兼容,如果重新开发这些组件成本又很高,这时用适配器模式就能很好的解决这些问题。2.定义适配器模式(Adapter)的定义如下:将一个类的接口转换原创 2021-06-20 17:56:54 · 940 阅读 · 0 评论 -
享元模式详解
1.简介在面向对象程序设计过程汇总,有时会面临要创建大量相同或相似对象实例的问题。创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈。例如:围棋和五子棋中的黑白棋子,图像中的坐标点或颜色,局域网中的路由器、交换机和集线器,教室里的桌子和凳子等。这些对象有很多相似的地方,如果能把他们相同的部分提取出来共享,则能节省大量的系统资源,这就是享元模式的产生背景。2.定义享元(Flyweight)模式的定义:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要原创 2021-06-27 15:43:28 · 231 阅读 · 2 评论 -
外观模式详解
1.简介在现实生活中,长长存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这是要有一个综合部门能解决一切手续问题就好了。软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户端对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提供一个统一的接口,从而降低系统的耦合度,这就是外观模式的目标2.定义外观(Facade)模式又叫作门面模式,是一种通过多个复杂的子系统提供一个一致的原创 2021-06-24 21:06:18 · 205 阅读 · 2 评论 -
装饰器模式详解
1.简介上班族大多都有睡懒觉的习惯,每天早上上班时间都很紧张,于是很多人为了多睡一会,就会用方便的方式解决早餐问题。有些人早餐可能会吃煎饼,煎饼中可以加鸡蛋,也可以加香肠,但是不管怎么“加码”,都还是一个煎饼。在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等,都是装饰器模式。在软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以采用装饰器模式来实现。2.定义装饰器(Decorato原创 2021-06-23 19:51:37 · 852 阅读 · 1 评论 -
桥接模式详解
1.简介在显示生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于Photoshop这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m种形状和n中颜色的图形就有m*n种,不但对应的子类很多,而且扩展困难。当然,这样的例子还有很多,如不同颜色和字体的文字、不同品牌和功率的汽车、不同性别和职业的男女、支持不同平台和不同文件格式的媒体播放器等。如果用桥接模式就能很好地解决这些问题。2.定义桥接模式(Bridge)的定义如下:将抽象与现实分离,使他们可以独立变原创 2021-06-22 15:15:01 · 639 阅读 · 0 评论 -
代理模式详解
1.简介在某些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如:购买火车票不一定要去火车站买,可以通过12306网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。在软件设计中,使用代理模式的例子也很多,例如:要访问的远程对象比较大,其下载需要花很多时间。还有因为安全原因需要屏蔽客户端直接访问真实对象,如某单位的内部数据库等。2.定义代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,原创 2021-06-18 22:21:32 · 266 阅读 · 0 评论