设计模式
文章平均质量分 96
zhangxiaoxiao9527
爱好代码的精神小伙儿
展开
-
(2021总结篇)面向对象软件设计模式(二十三)访问者模式
访问者模式访问者模式的意图,解决的问题,什么时候使用1.访问者模式2.访问者模式中的角色3.模板方法优缺点、使用场景优点:缺点:适用场景:访问者模式的意图,解决的问题,什么时候使用在现实生活中,有些集合对象存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式。例如,公园中存在多个景点,也存在多个游客,不同的游客对同一个景点的评价可能不同;医院医生开的处方单中包含多种药元素,査看它的划价员和药房工作人员对它的处理方式也不同,划价员根据处方单上面的药品名和数量进行划价,药房工作人员根据处方单的内容翻译 2021-06-02 21:56:49 · 439 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式(二十二)模板方法
模板方法模板方法的意图,解决的问题,什么时候使用1.模板方法2.模板方法中的角色抽象类/抽象模板(Abstract Class)具体子类/具体实现(Concrete Class)时候钩子函数反向控制3.模板方法优缺点、使用场景优点:缺点:适用场景:模板方法的意图,解决的问题,什么时候使用在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过翻译 2021-06-01 23:56:39 · 482 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式(二十一)策略模式
算法的封装与切换--策略模式策略模式的意图,解决的问题,什么时候使用1.策略模式2.策略模式中的角色3.策略模式优缺点、使用场景优点:缺点:适用场景:策略模式的意图,解决的问题,什么时候使用在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序翻译 2021-06-01 23:15:41 · 694 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式(二十)状态模式
处理对象的多种状态及其互相转换--状态模式状态模式的意图,解决的问题,什么时候使用1.状态模式2.状态模式中的角色3.状态模式优缺点、使用场景优点:缺点:适用场景:状态模式的意图,解决的问题,什么时候使用在软件开发过程中,应用程序中的部分对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。当有状态的对象与外部事件产生互动时,其内部状态就会发生改变,从而使其行为也发生改变。如人都有高兴和伤心的时候,不同的情绪有不同的行为,当然外界也会翻译 2021-05-31 23:32:28 · 407 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式(十九)观察者模式
对象间的联动--观察者模式观察者模式的意图,解决的问题,什么时候使用1.观察者模式2.观察者模式中的角色3.备忘录模式扩展多次撤销如何实现封装性4.备忘录模式优缺点、使用场景优点:缺点:适用场景:观察者模式的意图,解决的问题,什么时候使用在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有,当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。这样的例子还有很多,例如,股票价格与股翻译 2021-05-28 00:41:20 · 326 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式(十八)备忘录模式
备忘录模式备忘录模式的意图,解决的问题,什么时候使用1.备忘录模式2.备忘录模式中的角色3.备忘录模式扩展多次撤销如何实现封装性4.备忘录模式优缺点、使用场景优点:缺点:适用场景:备忘录模式的意图,解决的问题,什么时候使用个人都有犯错误的时候,都希望有种“后悔药”能弥补自己的过失,让自己重新开始,但现实是残酷的。在计算机应用中,客户同样会常常犯错误,能否提供“后悔药”给他们呢?当然是可以的,而且是有必要的。这个功能由“备忘录模式”来实现。其实很多应用软件都提供了这项功能,如 Word、记事本、Phot翻译 2021-05-26 22:33:32 · 257 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式--(十七)行为型模式---协调多个对象之间的交互--中介者模式
中介者模式中介者模式的意图,解决的问题,什么时候使用1.中介者模式2.中介者模式中的角色3.中介者模式优缺点、使用场景优点:缺点:适用场景:中介者模式的意图,解决的问题,什么时候使用在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,每个人必须记住他(她)所有朋友的电话;而且,朋友中如果有人的电话修改了,他(她)必须让其他所有的朋友一起修改,这叫作“牵一发而动全身”,非常复杂。如果把这种“网状结构”改为“星形结构”的话翻译 2021-05-25 00:25:29 · 406 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式--(十六)行为型模式---遍历聚合对象中的元素--迭代器模式
迭代器模式迭代器模式的意图,解决的问题,什么时候使用1.迭代器模式1.1 文法1.2 句子1.3 语法树2.解释器模式中的角色3.解释器模式优缺点、使用场景优点:缺点:适用场景:迭代器模式的意图,解决的问题,什么时候使用在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的语言,那么这些问题实例将是该语言的一些句子,这样就可以用“编译原理”中的解释器模式来实现了。虽然使用解释器模式的实例不是很多,但对于满足以上特点,且对运行效率要求不是很高的应用实例,如果用解翻译 2021-05-18 19:42:14 · 393 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式--(十五)行为型模式---自定义语言的实现--解释器模式
解释器模式解释器模式的意图,解决的问题,什么时候使用1.解释器模式1.1 文法1.2 句子1.3 语法树2.解释器模式中的角色3.解释器模式优缺点、使用场景优点:缺点:适用场景:解释器模式的意图,解决的问题,什么时候使用在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的语言,那么这些问题实例将是该语言的一些句子,这样就可以用“编译原理”中的解释器模式来实现了。虽然使用解释器模式的实例不是很多,但对于满足以上特点,且对运行效率要求不是很高的应用实例,如果用解翻译 2021-04-27 21:23:28 · 376 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式--(十四)行为型模式---请求发送者与接收者解耦--命令模式
命令模式命令模式的意图,解决的问题,什么时候使用1.命令模式2.命令模式中的角色3.命令模式优缺点、使用场景优点:缺点:适用场景:命令模式的意图,解决的问题,什么时候使用在软件开发系统中,“方法的请求者”与“方法的实现者”之间经常存在紧密的耦合关系,这不利于软件功能的扩展与维护。例如,想对方法进行“撤销、重做、记录”等处理都很不方便,因此“如何将方法的请求者与实现者解耦?”变得很重要,命令模式就能很好地解决这个问题。eg1:在现实生活中,命令模式的例子也很多。比如看电视时,我们只需要轻轻一按遥控器就能翻译 2021-04-25 21:26:58 · 280 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式--(十三)行为型模式---请求的链式处理--职责链模式
职责链模式职责链模式的意图,解决的问题,什么时候使用1.职责链模式2.职责链模式中的角色纯职责链不纯职责链3.职责链模式优缺点、使用场景优点:缺点:适用场景:职责链模式的意图,解决的问题,什么时候使用在现实生活中,一个事件需要经过多个对象处理是很常见的场景。例如,采购审批流程、请假流程等。公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据需要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这无疑增加了难度。在计算机软翻译 2021-04-20 22:18:05 · 241 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式--(十二)结构型模式---代理模式
代理模式代理模式的意图,解决的问题,什么时候使用1.代理模式2.代理模式中的角色3.代理模式优缺点、使用场景优点:缺点:适用场景:4.代理模式的扩展(待完善)4.1 静态代理和动态代理4.2 使用代理模式切换数据源4.3 彻底搞懂JDK动态代理核心原理4.4 代理模式在Spring源码中的应用4.5 代理模式在MyBatis源码中的应用代理模式的意图,解决的问题,什么时候使用在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不翻译 2021-04-19 20:36:51 · 308 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式--(十一)结构型模式---实现对象的服用--享元模式
外观模式享元模式的意图,解决的问题,什么时候使用1.享元模式2.享元模式中的角色3.享元模式优缺点、使用场景优点:缺点:适用场景:享元模式的意图,解决的问题,什么时候使用在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题。创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈。例如,围棋和五子棋中的黑白棋子,图像中的坐标点或颜色,局域网中的路由器、交换机和集线器,教室里的桌子和凳子等。这些对象有很多相似的地方,如果能把它们相同的部分提取出来共享,则能节省大量的系统资源,翻译 2021-04-13 20:45:49 · 239 阅读 · 1 评论 -
(2021总结篇)面向对象软件设计模式--(十)结构型模式---外观模式(门面模式)
外观模式外观模式的意图,解决的问题,什么时候使用1.外观模式2.外观模式中的角色3.外观模式优缺点、使用场景优点:缺点:适用场景:外观模式的意图,解决的问题,什么时候使用在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为翻译 2021-04-13 20:15:41 · 335 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式--(九)结构型模式---扩展系统功能--装饰器模式
装饰器模式装饰器模式的意图,解决的问题,什么时候使用1.装饰器模式2.装饰器模式中的角色2.1 透明装饰模式2.2 半透明装饰模式2.3 需要注意的问题3.装饰器模式优缺点、使用场景优点:缺点:适用场景:装饰器模式的意图,解决的问题,什么时候使用有些人早餐可能会吃煎饼,煎饼中可以加鸡蛋,也可以加香肠,但是不管怎么“加码”,都还是一个煎饼。在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等,都是装饰器模式。这里的例子总结一下:早餐对象:加鸡蛋,加牛奶…房子对象:装修门原创 2021-04-10 16:03:35 · 348 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式--(八)结构型模式---树形结构的处理--组合模式
组合模式组合模式的意图,解决的问题,什么时候使用1.桥接模式2.组合模式中的角色2.1 透明方式2.2 安全组合方式3.组合模式优缺点、使用场景优点:缺点:适用场景:组合模式的意图,解决的问题,什么时候使用在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣服与衣柜、以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如,文件系统中的文件与文件夹、窗体程序中的简单控件与容器控件等。对这些简单对象与复合对象的处理,如果用组合模式来实翻译 2021-04-05 15:02:35 · 394 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式--(七)结构型模式---处理多维度变换--桥接模式
桥接模式桥接模式的意图,解决的问题,什么时候使用1.桥接模式2.桥接模式中的角色桥接模式的应用实例3.桥接模式优缺点、使用场景优点:缺点:适用场景:桥接模式的意图,解决的问题,什么时候使用在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n 种,不但对应的子类很多,而且扩展困难。当然,这样的例子还有很多,如不同颜色和字体的文字、不同品牌和转载 2021-04-04 16:49:41 · 542 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式--(六)结构型模式---不兼容结构的协调--适配器模式
适配器模式适配器模式的意图,解决的问题,什么时候使用1.适配器模式2.适配器模式中的角色2.1 类适配器2.2 对象适配器2.3 双向适配器(额外补充)2.4 缺省适配器(额外补充)3.建造者模式优缺点、使用场景优点:缺点:适用场景:适配器模式的意图,解决的问题,什么时候使用在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一原创 2021-04-01 21:53:45 · 464 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式--(五)创建模式---建造者模式
原型模式建造者模式总概述建造者模式的意图,解决的问题,什么时候使用1.建造者模式2.单例模式中的角色3.建造者模式优缺点、使用场景优点:缺点:适用场景:4. 建造者模式和工厂模式的区别建造者模式总概述在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由 CPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给翻译 2021-03-21 16:15:15 · 391 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式--(四)创建模式---原型模式
原型模式原型模式总概述原型模式的意图,解决的问题,什么时候使用1.原型模式2.单例模式中的角色3.原型模式之浅克隆4.原型模式之深克隆5.原型模式优缺点、使用场景优点:缺点:适用场景:原型模式总概述在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。在设计模式中也存在一个类似的模式,可以通过一个原型对象克隆出多个一模一样的对象,该对象称之为原型模式。原型模式的意图,解决的原创 2021-03-20 01:58:56 · 398 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式--(三)创建模式---单例模式
创建模式---工厂三兄弟单例模式总概述单例模式的意图,解决的问题,什么时候使用1.单例模式2.单例模式中的角色3.创建单例的方式3.1 饿汉模式3.2 懒汉模式3.3 Initialization Demand Holder(IoDH)3.4 单例模式优缺点、使用场景优点:缺点:适用场景:单例模式总概述在有些系统中,为了节省内存资源、保证数据内容的一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式。在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动原创 2021-03-18 22:19:26 · 482 阅读 · 0 评论 -
(2021总结篇)面向对象软件设计模式--(二)创建模式---工厂三兄弟(简单工厂、工厂方法(工厂模式)、抽象工厂)
创建模式---工厂三兄弟工厂模式总概述工厂模式总概述原创 2021-03-15 22:22:02 · 590 阅读 · 4 评论 -
(2021总结篇)面向对象软件设计模式--(一)开篇导语,概述,面向对象设计七大原则
activity(流程引擎)从零入门到实战学习开篇导语专栏目录面向对象设计六大原则开篇导语最近在软件开发工程中越发觉得自己写代码的水平难以提升,不知道在哪看到的一句话“写好代码不仅仅是抽象两个方法就完了,要设计一套优美的代码,要遵循设计模式才行”。这里我们觉得不是说所有的软件代码都是如此,只是针对现在大部分软件而言,因为现在大部分系统或者说大部分语法都是面向对象的。打算总结一下学习设计模式的过程以及资料,虽然这方面的资料非常多,但是自己去总结一遍,完全会有不同的理解与收获,所以不管学习什么内容,都建议原创 2021-01-09 13:44:32 · 405 阅读 · 0 评论