
设计模式
文章平均质量分 95
JWei_7
这个作者很懒,什么都没留下…
展开
-
设计模式之访问者模式
设计模式之访问者模式模式的定义与特点访问者(Visitor)模式的定义优点缺点模式的结构与实现1. 模式的结构2. 模式的实现模式的应用实例模式的应用场景模式的扩展在现实生活中,有些集合对象存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式。例如,公园中存在多个景点,也存在多个游客,不同的游客对同一个景点的评价可能不同;医院医生开的处方单中包含多种药元素,査看它的划价员和药房工作人员对它的处理方式也不同,划价员根据处方单上面的药品名和数量进行划价,药房工作人员根据处方单的内容进行抓药。原创 2021-09-15 20:35:47 · 460 阅读 · 0 评论 -
设计模式之迭代器模式
设计模式之迭代器模式模式的定义与特点迭代器(Iterator)模式的定义优点缺点模式的结构与实现1. 模式的结构2. 模式的实现模式的应用实例模式的应用场景在现实生活以及程序设计中,经常要访问一个聚合对象中的各个元素,如“数据结构”中的链表遍历,通常的做法是将链表的创建和遍历都放在同一个类中,但这种方式不利于程序的扩展,如果要更换遍历方法就必须修改程序源代码,这违背了 “开闭原则”。既然将遍历方法封装在聚合类中不可取,那么聚合类中不提供遍历方法,将遍历方法由用户自己实现是否可行呢?答案是同样不可取,因为原创 2021-09-15 20:03:04 · 313 阅读 · 1 评论 -
设计模式之中介者模式
设计模式之中介者模式模式的定义与特点优点缺点模式的结构与实现1. 模式的结构2. 模式的实现模式的应用实例模式的应用场景在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。例如,每个人必须记住他(她)所有朋友的电话;而且,朋友中如果有人的电话修改了,他(她)必须让其他所有的朋友一起修改,这叫作“牵一发而动全身”,非常复杂。如果把这种“网状结构”改为“星形结构”的话,将大大降低它们之间的“耦合性”,这时只要找一个“中介者”就原创 2021-09-15 19:49:52 · 419 阅读 · 0 评论 -
设计模式之状态模式
设计模式之状态模式状态模式的定义与特点状态(State)模式的定义优点缺点状态模式的结构与实现1. 模式的结构2. 模式的实现状态模式的应用实例状态模式的应用场景在软件开发过程中,应用程序中的部分对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。当有状态的对象与外部事件产生互动时,其内部状态就会发生改变,从而使其行为也发生改变。如人都有高兴和伤心的时候,不同的情绪有不同的行为,当然外界也会影响其情绪变化。对这种有状态的对象编程原创 2021-09-15 19:23:59 · 427 阅读 · 0 评论 -
设计模式之责任链模式(职责链模式)
在现实生活中,一个事件需要经过多个对象处理是很常见的场景。例如,采购审批流程、请假流程等。公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同,员工必须根据需要请假的天数去找不同的领导签名,也就是说员工必须记住每个领导的姓名、电话和地址等信息,这无疑增加了难度。在计算机软硬件中也有相关例子,如总线网中数据报传送,每台计算机根据目标地址是否同自己的地址相同来决定是否接收;还有异常处理中,处理程序根据异常的类型决定自己是否处理该异常;还有 Struts2 的拦截器、JSP.原创 2021-09-15 19:15:13 · 336 阅读 · 0 评论 -
设计模式之命令模式
在软件开发系统中,“方法的请求者”与“方法的实现者”之间经常存在紧密的耦合关系,这不利于软件功能的扩展与维护。例如,想对方法进行“撤销、重做、记录”等处理都很不方便,因此“如何将方法的请求者与实现者解耦?”变得很重要,命令模式就能很好地解决这个问题。在现实生活中,命令模式的例子也很多。比如看电视时,我们只需要轻轻一按遥控器就能完成频道的切换,这就是命令模式,将换台请求和换台处理完全解耦了。电视机遥控器(命令发送者)通过按钮(具体命令)来遥控电视机(命令接收者)。再比如,我们去餐厅吃饭,菜单不是等到原创 2021-09-15 18:51:34 · 221 阅读 · 0 评论 -
设计模式之策略模式
设计模式之策略模式策略模式的定义与特点定义优点缺点策略模式的结构与实现1. 模式的结构2. 模式的实现策略模式的应用实例策略模式的应用场景在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。如原创 2021-09-15 18:43:54 · 298 阅读 · 0 评论 -
设计模式之模板模式(模板方法)
设计模式之模板模式模式的定义与特点定义优点缺点模式的结构与实现1. 模式的结构1)抽象类/抽象模板(Abstract Class)2)具体子类/具体实现(Concrete Class)2. 模式的实现模式的应用实例模式的应用场景在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评原创 2021-09-15 01:15:30 · 644 阅读 · 0 评论 -
设计模式之观察者模式
设计模式之观察者模式模式的定义与特点观察者(Observer)模式的定义:观察者模式的优缺点:优点缺点模式的结构与实现1. 模式的结构2. 模式的实现模式的应用实例模式的应用场景模式的扩展1. Observable类2. Observer 接口在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有,当我们开车到交叉路口时,遇到红灯会停,遇到绿灯会行。这样的例子还有很多,例如,股票价原创 2021-09-15 00:52:21 · 328 阅读 · 0 评论 -
设计模式之享元模式
设计模式之享元模式享元模式的定义与特点定义优缺点享元模式的结构与实现1. 模式的结构2. 模式的实现享元模式的应用实例享元模式的应用场景在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题。创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈。例如,围棋和五子棋中的黑白棋子,图像中的坐标点或颜色,局域网中的路由器、交换机和集线器,教室里的桌子和凳子等。这些对象有很多相似的地方,如果能把它们相同的部分提取出来共享,则能节省大量的系统资源,这就是享元模式的产生背景。享元原创 2021-09-15 00:17:18 · 279 阅读 · 0 评论 -
设计模式之装饰器模式
设计模式之装饰器模式装饰器模式的定义与特点定义优点缺点装饰器模式的结构与实现模式的结构装饰器模式的结构图模式的实现装饰器模式的应用场景“装饰模式”和“[代理模式](https://blog.youkuaiyun.com/qq_54729417/article/details/120162520)”有啥区别?上班族大多都有睡懒觉的习惯,每天早上上班时间都很紧张,于是很多人为了多睡一会,就会用方便的方式解决早餐问题。有些人早餐可能会吃煎饼,煎饼中可以加鸡蛋,也可以加香肠,但是不管怎么“加码”,都还是一个煎饼。在现实生活原创 2021-09-14 23:48:54 · 277 阅读 · 0 评论 -
设计模式之组合模式
在现实生活中,存在很多“部分-整体”的关系例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣服与衣柜、以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如,文件系统中的文件与文件夹、窗体程序中的简单控件与容器控件等。对这些简单对象与复合对象的处理,如果用组合模式来实现会很方便。设计模式之组合模式组合模式的定义与特点组合(Composite Pattern)模式的定义组合模式的结构与实现1. 模式的结构1. 透明方式2.安全方式2. 模式的实现透明组合模式安全组合模式原创 2021-09-07 18:29:55 · 454 阅读 · 0 评论 -
设计模式之桥接模式
在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计类似于 Photoshop这样的软件,能画不同形状和不同颜色的图形呢?如果用继承方式,m 种形状和 n 种颜色的图形就有 m×n种,不但对应的子类很多,而且扩展困难。当然,这样的例子还有很多,如不同颜色和字体的文字、不同品牌和功率的汽车、不同性别和职业的男女、支持不同平台和不同文件格式的媒体播放器等。如果用桥接模式就能很好地解决这些问题。桥接模式的定义与特点桥接(Bridge)模式的定义如下将抽象与实现分.原创 2021-09-07 18:11:54 · 765 阅读 · 0 评论 -
设计模式之门面模式(外观模式)
设计模式之门面模式(外观模式)外观模式的定义与特点优点缺点外观模式的结构与实现1. 模式的结构2. 模式的实现外观模式的应用实例外观模式的应用场景外观模式的扩展在现实生活中,常常存在办事较复杂的例子,如办房产证或注册一家公司,有时要同多个部门联系,这时要是有一个综合部门能解决一切手续问题就好了。软件设计也是这样,当一个系统的功能越来越强,子系统会越来越多,客户对系统的访问也变得越来越复杂。这时如果系统内部发生改变,客户端也要跟着改变,这违背了“开闭原则”,也违背了“迪米特法则”,所以有必要为多个子系统提原创 2021-09-07 18:00:24 · 715 阅读 · 0 评论 -
设计模式之代理模式
代理模式代理模式的定义与特点优点:缺点:代理模式的结构与实现1. 模式的结构2. 模式的实现代理模式的应用实例代理模式的应用场景代理模式的扩展在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象。例如,购买火车票不一定要去火车站买,可以通过12306 网站或者去火车票代售点买。又如找女朋友、找保姆、找工作等都可以通过找中介完成。在软件设计中,使用代理模式的例子也很多,例如,要访问的远程对象比较大(如视频或大图像等),其下载要花很多时间。还有因原创 2021-09-07 17:41:09 · 136 阅读 · 0 评论 -
设计模式之适配器模式
适配器模式模式的定义与特点优点:缺点:模式的结构与实现模式的结构模式的实现(1) 类适配器模式的代码如下。(2)对象适配器模式的代码如下。模式的应用实例模式的应用场景在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD内存卡时需要一个读卡器等。在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系原创 2021-09-07 16:44:43 · 95 阅读 · 0 评论 -
设计模式之原型模式
原型模式1 原型模式概念1.1 介绍1.2 定义1.3 使用场景2 原型模式UML类图(通用)2. 模式的实现原型模式的应用场景原型模式的扩展1 原型模式概念1.1 介绍原型模式是一个创建型的模式。原型二字表明了改模式应该有一个样板实例,用户从这个样板对象中复制一个内部属性一致的对象,这个过程也就是我们称的**“克隆”。被复制的实例**就是我们所称的“原型”,这个原型是可定制的。原型模式多用于创建复杂的或者构造耗时的实例,因为这种情况下,复制一个已经存在的实例可使程序运行更高效。1.2 定义用原型原创 2021-09-07 16:24:31 · 325 阅读 · 0 评论 -
设计模式之建造者模式(详解构造函数、set方法、建造者模式)
建造者模式为什么需要建造者模式?与工厂模式有何区别?重点回顾主要解决: 主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。优点:1、建造者独立,易扩展。2、便于控制细节风险。缺点:1、产品必须有共同点,范围有限制。2、如内部变化复杂,会有很多的建造类。今天,我们再来学习另外一个比较常用的创建型设计模式,Builder 模式,中文翻译为原创 2021-09-02 15:21:38 · 527 阅读 · 1 评论 -
设计模式之工厂模式
工厂模式1.工厂模式定义2.简单工厂模式3.工厂方法模式4.抽象工厂模式1.工厂模式定义工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。注意事项:作为一种创建类模式,在任何需要生原创 2021-09-02 00:53:06 · 257 阅读 · 0 评论 -
设计模式之单例模式
从今天开始,我们正式进入到设计模式的学习。我们知道,经典的设计模式有 23 种。其中,常用的并不是很多。据我的工作经验来看,常用的可能都不到一半。如果随便抓一个程序员,让他说一说最熟悉的 3 种设计模式,那其中肯定会包含今天要讲的单例模式。首先在学习之前 我们来搞清楚这几个问题:为什么要使用单例?单例存在哪些问题?单例与静态类的区别?有何替代的解决方案?话不多说,让我们带着这些问题,正式开始今天的学习吧!为什么要使用单例?单例设计模式(Singleton Design Pattern)理原创 2021-08-25 15:35:20 · 815 阅读 · 0 评论