
设计模式
苹果先生Jay
这个作者很懒,什么都没留下…
展开
-
设计模式总述
1.设计模式定义 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式...原创 2018-12-28 22:47:07 · 188 阅读 · 0 评论 -
装饰者模式(Decorator Pattern)
装饰边框与被装饰物的一致性1.基本介绍有一个原型程序作为被装饰者,和装饰者实现同一接口,装饰者则可以去修改加强来自用接口相同的方法,这样不断的为对象添加装饰物的设计模式为装饰者设计模式。2.具体实例Display类抽象类或者接口,供装饰者和被装饰者去实现,这样装饰者就可以通过接口去装饰对象。/** * @author Jay * @date 2019/6/24 22:33 * @...原创 2019-06-24 23:32:52 · 131 阅读 · 0 评论 -
抽象工厂模式(Abstract Factory Pattern)
将关联零件组装成产品1.基本介绍抽象工厂是工厂方法的扩展,工厂方法一般只能生成一种实例,而抽象工厂可以生成多种实例.2.代码实现Factory:抽象工厂接口/** * @author Jay * @date 2019/7/4 22:26 * @description 抽象方法 * 抽象工厂可以生产多个抽象产品 */public interface IFactory { ...转载 2019-07-04 23:31:12 · 154 阅读 · 0 评论 -
外观模式(Facade Pattern)
简单窗口外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。1.外观模式概述在软件开发中,(Facade)来实现该功能,外观类充当了软件系统中的“服务员”,它为多个业务类的调用提供了一个统一的入口,简化了类与类之间的交互。在外观模式中,那些需要交互的业务类...原创 2019-06-29 23:37:37 · 233 阅读 · 0 评论 -
代理模式(Proxy Pattern)
只在必要时生成实例代理模式可以简单的看作是有个中间人代替你进行工作,当中间人完成不了时,才会由你出马完成。1.具体实例Printable接口/** * @author Jay * @date 2019/6/29 23:40 * @description 打印接口 */public interface Printable { /** * 设置名字 *...原创 2019-06-30 00:12:19 · 194 阅读 · 0 评论 -
解释器模式(Interpreter Pattern)
语法规则也是类1.基本介绍给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子类的一览表2.具体实现Node抽象类/** * @author Jay * @date 2019/7/5 23:00 * @description 节点类 */public abstract class Node { /** * 解...转载 2019-07-05 23:33:47 · 117 阅读 · 0 评论 -
命令模式(Command Pattern)
命令也是类1.基本介绍将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化。用于==“行为请求者”与“行为实现者”解耦==,可实现二者之间的松耦合,以便适应变化。分离变化与不变的因素。在面向对象的程序设计中,一个对象调用另一个对象,一般情况下的调用过程是:创建目标对象实例;设置调用参数;调用目标对象的方法。但在有些情况下有必要使用一个专门的类对这种调用过程加以封装,我们把...转载 2019-07-06 18:29:42 · 214 阅读 · 0 评论 -
备忘录模式(Memento Pattern)
保存对象状态1.基本介绍为了使软件的使用更加人性化,对于误操作,我们需要提供一种类似“后悔药”的机制,让软件系统可以回到误操作前的状态,因此需要保存用户每一次操作时系统的状态,一旦出现误操作,可以把存储的历史状态取出即可回到之前的状态。在应用软件的开发过程中,很多时候我们都需要记录一个对象的内部状态。在具体实现过程中,为了允许用户取消不确定的操作或从错误中恢复过来,需要实现备份点和撤销机制...转载 2019-07-06 19:01:01 · 266 阅读 · 0 评论 -
中介者模式(Mediator Pattern)
只有一个仲裁者1.模式介绍用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立的改变它们之间的交互。使用场景:中介者模式适合用于多个对象之间紧密耦合的情况,紧密耦合的标准是:在类图中出现了蜘蛛网状结构。这有利于把蜘蛛网状结构梳理为星型结构,使原本复杂混乱的关系变得清晰简单。实际使用:中介者模式也叫调停者模式,一个对象要与N个对象交流,就...原创 2019-07-06 19:31:08 · 174 阅读 · 0 评论 -
责任链模式(Chain of Responsibility Pattern)
推卸责任1.模式介绍当外部请求程序进行某个处理,但程序暂时无法直接决定由哪个对象负责处理时,就需要推卸责任,可将多个对象组成一条职责链,然后按照他们在职责链上的顺序一个一个找出到底应该谁来负责处理。可以弱化请求方和处理方之间的关联关系,让双方各自成为都可以独立复用的组件,程序还可以应对其他需求,根据处理的对象而变化。2.具体实例Trouble类/** * @author Jay ...转载 2019-07-06 20:13:12 · 230 阅读 · 0 评论 -
访问者模式(Visitor Pattern)
访问数据结构并处理数据数据结构中保存着许多的元素,在对这些元素处理的时候,将处理代码放入数据结构中,当每次增加或者修改处理方法时,都必须将数据结构的类进行修改,因此,我们需要用到访问者模式,数据结构和数据处理被分离出来,创建一个访问者专门来访问数据结构中的元素,把元素的处理交给访问者类,这样增加或修改时不需要改动数据结构。1.实例使用访问者模式来访问文件夹模式的数据结构Vistitor类...转载 2019-07-06 21:35:52 · 173 阅读 · 0 评论 -
迭代器模式(Iterator Pattern)
一个一个遍历1.模式介绍迭代器模式(Iterator Pattern)又称为游标(Cursor)模式,是行为型设计模式之一。源于对容器的访问,比如java中的list,Map,数组等,我们知道对容器对象的访问必然是多种多样的,所以我们把遍历的方法封装在容器中,或者不提供遍历方法。如果我们将遍历的方法封装到容器中,那么对于容器类来说就承担了过多的功能,容器类不仅要维护自身内部的数据元素而且...原创 2019-06-23 21:03:30 · 204 阅读 · 0 评论 -
享元模式(Flyweight Pattern)
共享对象,避免浪费1.基本介绍享元模式适用于需要new大量对象的情况。通过共享实例的方式避免new出实例,浪费资源。在使用享元模式的时候要注意,当共享实例修改时,将会影响使用该实例的多处地方,所以使用前需要斟酌,什么类需要使用享元模式。2.实现实例BigChar类/** * @author Jay * @date 2019/7/2 0:06 * @description 大字符...原创 2019-07-02 00:43:16 · 113 阅读 · 0 评论 -
工厂方法模式(Factory Method Pattern)
将实例的生成交给子类1.基本介绍模板设计模式中,父类规定处理的流程,在子类中实现具体处理,如果该模式用于生成实例对象,它就演变为工厂设计模式。工厂方法模式中:父类决定实例的生成方式,但并不决定所要生成具体的类,具体的处理全部交给子类负责。 这样就可以将生成实例的框架和负责生成实例的类解耦。2.实现过程类的一览表名字说明Product只定义抽象方法 use 的抽象类...原创 2019-05-21 23:10:12 · 160 阅读 · 0 评论 -
单例模式(Singleton Pattern)
只有一个实例1.单例模式特点一个类有且仅有一个实例,并且自行实例化向整个系统提供。通过使用设计模式可以让我们的代码复用性更高,可维护性更高,让你的代码写的更优雅2.单例模式的实现2.1 饿汉模式饿汉式会提前进行实例化,没有延迟加载,不管是否使用都会有一个已经初始化的实例在内存中,但不会出现懒汉式中的多线程问题。/** * @author Jay * @date 2019/5/16 ...原创 2019-05-16 23:52:33 · 116 阅读 · 0 评论 -
模板方法模式(Template Method Pattern)
将具体处理交给子类1.基本介绍父类定义处理流程的框架,在子类实现中具体处理模板方法设计模式是指带有模板功能的模式,组成模板的方法被定义在父类中。这些方法都是抽象方法,所以只查看父类的代码无法知道这些方法最终会进行如何的具体处理。只能知道父类是如何去调用这些方法实现以上抽象方法的就是子类.子类中实现了抽象方法也就是决定了具体的处理。也就是说,只要不同的子类实现不同的具体处理,当父类中的模板方...原创 2019-05-22 23:12:05 · 191 阅读 · 0 评论 -
适配器模式(Adapter Pattern)
加个"适配器"以便于复用1.使用情况在程序世界中,经常存在现有的程序无法直接使用,需要适当的变化才能使用.这种用于填补俩个程序之间差异的设计模式就是适配器模式。适配器模式分为以下俩种:类适配器模式(使用继承的适配器)->类和接口对象适配器模式(使用委托的适配器)->俩个类2.类适配器程序类图Banner类/** * @author Jay * @date...原创 2019-05-23 23:42:28 · 238 阅读 · 0 评论 -
状态模式(State Pattern)
用类表示状态1.基本介绍状态模式使用对象的形式来记录某种状态。使用状态模式可以省去多个if-else或者是switch的判断。可以直接使用对象方法的形式来处理逻辑。我们在编写代码的时候,遇到大量的条件判断的时候,可能会采用策略模式来优化结构,因为这时涉及到策略的选择,但有时候仔细查看下,就会发现,这些所谓的策略其实是对象的不同状态,更加明显的是,对象的某种状态也成为判断的条件。2.实例分...原创 2019-06-05 23:18:42 · 510 阅读 · 0 评论 -
组合模式(Composite Pattern)
容器与内容的一致性1.基本介绍该模式用于创造出像文件夹和文件这样的结构,使容器与内容具有一致性,创造出递归模式,就如同文件夹中可以存入文件,也可以存入文件夹,而查找的时候,都可以获得其条目名。2.具体实现类的一览表类图Entry类:是一个制定规则的抽象类,定义了共有的方法./** * @author Jay * @date 2019/6/6 23:11 * @descr...原创 2019-06-07 00:12:01 · 943 阅读 · 0 评论 -
原型模式(Prototype Pattern)
通过复制生成实例1.使用背景开发中通常通过new关键字生成实例,必须指定类名,然而在下边情况下,在 不指定类名的情况下生成实例,根据现有的实例生成新的实例。对象种类繁多,无法将其整合到同一个类中难以根据类生成实例.生成实例的过程太复杂,很难根据类来生成实例.比如用户想生成和之前用户生成实例完全一样的实例时,由于生成过程复杂,很难保证完全一致,所以可以保存之前的实例,然后通过复制来...原创 2019-06-04 00:03:00 · 211 阅读 · 0 评论 -
桥接模式(Bridge Pattern)
将类的功能层次结构与实现层次结构分离1.基本介绍将类的功能层次结构和类的实现层次结构连接起来。类的功能层次结构:希望增加新的功能,例如有一个Something类,想在其中增加新的功能时,一般会写一个子类,这就构成了类层次结构.为了增加功能而产生的层次结构。当增加新的功能时,从各个层次中找出符合自己需求的类,以它为父类编写子类,并在子类中增加新的功能。父类具有基本功能子类中增加新的功...原创 2019-06-04 23:52:07 · 384 阅读 · 0 评论 -
构建者模式(Builder Pattern)
组装复杂的实例1.基本介绍对于组件复杂的实例时,很难一气呵成,而且实例形式不定,会经常性变化,这时候就需要创建组成实例的各个部分,然后根据具体需求,分阶段将其组装起来,如同活字印刷术,或者建造建筑。2.具体实现Builder类:/** * @author Jay * @date 2019/6/25 22:41 * @description 声明编写文档方法的抽象类 */pub...原创 2019-06-25 23:39:25 · 494 阅读 · 0 评论 -
观察者模式(Observer Pattern)
发送状态变化的通知1.基本介绍在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。当对一个对象的改变需要同时改变其它对象,而不知道具体有多少个对象待改变。当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换句话说,你不希望这些对象是紧密耦合的。结构图:2.主要角色抽象被观察者...原创 2019-06-22 22:53:27 · 259 阅读 · 0 评论 -
策略模式(Strategy Pattern)
整体的替换算法1.基本介绍无论什么程序,其目的都是为了解决问题,而为了解决问题,我们需要编写特定算法,使用策略模式可以整体的替换算法的实现部分,即算法的具体实现不依赖于业务类,将俩者分离开,降低耦合,可以很轻松使用不同算法,或者修改算法。2.具体实例Hand类:手势类,被其他类调用,并非设计模式中角色。public class Hand { public static final ...转载 2019-07-06 21:59:54 · 164 阅读 · 0 评论