设计模式
文章平均质量分 79
设计模式介绍&使用参考
你天加练的全战攻城狮梦
这个作者很懒,什么都没留下…
展开
-
MemoPattern-备忘录模式
定义:在不破坏封闭的前提下,捕获一个对象的内部状态,并在改对象之外保存这个状态,以后可以将对象恢复到原先保存的状态。应用场景:适用于功能比较复杂,但余姚维护or记录属性历史的功能。涉及角色:Originator(发起者):负责创建一个备忘录Memo,用来记录当前时刻自身的内部状态,并可以恢复备忘录内部状态,可以根据需要决定memo存储自己的那些内部状态。Memo(备忘录):负责存储O...原创 2019-02-22 09:35:04 · 145 阅读 · 0 评论 -
StatusPattern-状态模式
定义:对象行为的变化是由于状态的改变引入,当内部状态发生变化的时候,就会改变对象的行为,从客户端的角度看似乎就改变了整个类。目的:将状态和行为分割开来,减少相互的依赖理解:将状态封装成独立的类,并将动作委托到代表当前状态的对象。客户不会和状态进行交互,全盘了解状态是context的工作。状态模式中,每个状态通过持有context的引用,来实现状态转移。与策略模式对比:相似之处:...原创 2019-02-22 11:34:20 · 117 阅读 · 0 评论 -
BuildPattern-建造者模式
定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造的过程都是相似的,但可以创造出形形色色的东西结构:被创造者创建过程接口(定义了创建标准)创建指导类复杂对象的构建(创建指导类),表示(创建过程接口),两者分离。被创建者:public class Human { private String head; private String body;...原创 2019-02-22 08:27:27 · 182 阅读 · 0 评论 -
Iterator-迭代器模式
定义:迭代器模式(Iterator)提供了一种方法顺序访问一个聚合对象中的各种元素而又不暴露该对象的内部表示。角色构成:Iterator(迭代器角色):定义遍历元素所需要的方法,一般来说三个方法。取得下一个元素next()判断是否遍历结束hasNext()移出当前对象remove()ConcreteInerator(具体的迭代器角色):实现迭代器接口中定义的方法,完成集合迭代Ag...原创 2019-02-22 13:35:21 · 96 阅读 · 0 评论 -
CommandPattern-命令模式
角色:Command: 定义命令的统一接口ConcreteCommand:Command接口的实现者,用来执行具体的命令Receiver:命令的实际执行者Invoker:命令的请求者,这个角色用来对各个命令进行控制使用场景:1 命令的发送者和命令执行者有不同的生命周期,命令发送了并不是立即执行2 命令模式是对功能方法的抽象,不是对对象的抽象3 命令模式是将功能提升到对象来操作,以便...原创 2019-02-22 14:37:59 · 116 阅读 · 0 评论 -
DesignPattern-外观模式
外观模式:外观模式定义了一个高层的功能,为子系统中的多个模块协同的完成某种功能需求提供简单的对外功能调用方式,使得这一个子系统更加容易被外部使用。他隐藏了系统的复杂性,并向客户提供了一个可以访问系统的接口。简单来说,就是该模式就是把一些复杂的流程封装成一个接口供给外部用户简单使用。角色:门面系统(Facade):外观模式的核心,它被客户调用,它熟悉子系统的功能,内部根据客户角色的需求预定了...原创 2019-03-03 13:20:03 · 93 阅读 · 0 评论 -
DesignPattern-享元模式
享元模式:String常量池,数据库连接池,缓冲池等等都是享元模式的应用。每次创建字符创对象时候,都需要创建一个新的字符串对象的话,内存开销很大,所以如果第一次创建了字符串对象hunter,下次在创建相同的字符串hunter时,只是把它的引用再次指向hunter,这样就实现了hunter字符串内内存中的共享。角色:Flyweight:抽象享元类,所有具体享元类的超类or接口,Concret...原创 2019-03-03 11:46:02 · 92 阅读 · 0 评论 -
DesignPattern-组合模式
组合模式定义了如何将容器对象和叶子对象进行递归组合,使得客户在使用过程中无需进行区分,可以对他们进行一致的处理。组合模式组合多个对象形成树形结构以表示“整体-部分”层级机构在使用组合模式中需要注意的一点就是组合模式最关键的地方:叶子对象和组合对象实现相同的接口,这就是组合模式能够将叶子节点和对象节点进行一只处理的原因。角色:Component :组合中的对象声明接口,在适当的情况下,实现所...原创 2019-03-03 12:49:28 · 131 阅读 · 0 评论 -
DesignPattrn-中介者模式
中介者模式相当于中间平台,一切操作都有中间平台去分发,中介者模式,兴义了一个中介对象来封装一些列对象之间的交互关系。中介者是各个对昂之间不需要显示地相互引用,从而使耦合性降低,而且可以独立改变他们之间的交互行为。对应现实生活中,中介者模式,打牌总有输赢,对应的每个参与者货币的变化:/// <summary>/// 抽象牌友类/// </summary>public...原创 2019-02-27 12:55:58 · 125 阅读 · 0 评论 -
DesignPattern-访问者模式
基本思想:系统中拥有一个or许多对象构成,比较稳定的对象结构,这些对象的类都拥有一个accept方法用来接受访问者对象的访问。访问者是一个接口,它拥有一个visit方法,这个方法访问到的对象结构中不同类型的元素做出不同的处理。精髓:封装一些作用于某种数据结构中各元素的操作,它可以在不改变这个数据结构的前提下定义作用域这些元素的新的操作。有这么一个操作,它是作用域一些元素之上的,而这些元素属...原创 2019-03-03 15:21:06 · 123 阅读 · 0 评论 -
DesignPattern-桥接模式
桥接模式:将抽象部分与它的实现部分分离开来,使他们都可以独立变化将继承关系转化我关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。角色:Abstraction:抽象类RefinedAbstraction:扩充抽象类Implementor:实现类接口concreteOmplementor具体实现类代码实现:public abstract class Sha...原创 2019-03-03 13:38:24 · 101 阅读 · 0 评论 -
Proxy-代理模式
代理模式给一个对象提供了一个代理对象,并由代理对象控制对原对象的引用,是装饰器模式(Decorator)模式的应用。静态代理:运行之前,代理类文件已经被创建动态代理:代理类在程序运行时动态生成,主要分为JDK动态代理和cglib动态代理。public interface Subject { void request();}public class RealSubject implem...原创 2019-02-15 22:19:57 · 147 阅读 · 0 评论 -
Delegate-委派模式
定义一个抽象接口,它有若干实现类,他们真正执行业务方法,这些子类是具体任务角色,定义委派者角色也实现该接口,但它负责在各个具体角色实例间做出决定,由它判断调用具体实现的方法。委派模式对外隐藏了具体实现,仅将为拍着角色暴露给外部,如Spring的DispatchServlet,有点是对内隐藏实现,易于扩展,简化调用,在Spring,MyBatis等开源框架中,均有运用。有点像 老板给经理下达任务...原创 2019-02-12 11:35:49 · 332 阅读 · 0 评论 -
Prototype-原型模式
原型模式:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。主要的三个角色:Prototype: 抽象原型类,声明克隆自身的接口ConcretePrototype: 具体原型类,实现克隆的具体操作CLient: 客户类,让一个原型克隆自身,从而获得一个新的对象。public class Resume implements Cloneable { private ...原创 2019-02-12 00:45:51 · 106 阅读 · 0 评论 -
Decorator- 装饰器模式
目的:通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生子类来扩展,或者是使用对象组合的方式。显然直接修改对应的类的方式不可取,在面向对象的设计中,我们应该尽量使用组合对象而不是继承对象来扩展和复用功能,装饰器模式就是基于对象组合的方式的。装饰器模式动态的给一个对象附加了更多的责任,被装饰对象在装饰前和装饰后,不会有什么不同。装饰器模式可以在不用创建更多子类的情况下,将对象的功能加...原创 2019-02-15 12:48:55 · 126 阅读 · 0 评论 -
Adapter-装饰器(适配器)模式
概念:将一个接口转换成客户希望的另一种接口,适配器模式使得接口不兼容的那些类可以一起工作,别名为包装器(Wrapper)。从而使得原本因接口不匹配而无法在一起工作的两个类能够在一起工作。实现这个目的有两个方法,继承or组合1,使用继承(类适配器模式)2,使用组合(对象适配器模式)角色:Target 请求接口Adapter装饰器类Adaptee 被适配类//使用继承,类适配器模式...原创 2019-02-12 13:20:43 · 165 阅读 · 0 评论 -
Observer-观察者模型
概念:定义对象间的一种一对多的依赖关系当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新,本质是触发联动结构:1 目标对象的定义2 具体的目标对象定义3 观察者的接口定义4 观察者的具体实现触发时机:是在完成状态维护后触发,因为通知会传递数据,不能先通知,后改数据,这会导致观察者和目标对象状态不一致通知观察着的顺序是不一定的,观察者的实现,不能依赖于通知的顺序...原创 2019-02-15 13:33:31 · 169 阅读 · 0 评论 -
Factory- 工厂模式
1 简单工厂 Simple Factory产品类abstract class BMW { public BMW(){ } } public class BMW320 extends BMW { public BMW320() { System.out.println("制造--&gt;BMW320");...原创 2019-02-11 23:27:59 · 77 阅读 · 0 评论 -
Singleton-单例模式
1 饿汉模式public class Singleton{ //1 将构造方法私有化,不允许外部直接创建对象 private Singleton(){ } //2 创建类的唯一实例 private static Singleton instance=new Singleton(); //3 提供一个用于获取实例的方法 public static Singleton getI...原创 2019-02-11 16:52:20 · 122 阅读 · 1 评论 -
Template-模板模式
定义抽象积累,为所有子类提供一个算法框架,用final修饰,避免子类修改公用方法,不变的方法,用private修饰。不公用方法,变得方法,用protected abstract修饰添加钩子方法,用protect 修饰,并在公用方法中加入钩子方法,以及模板逻辑,钩子方法提供一个默认or空的实现,具体的子类可以自行决定是否挂钩,以及如何挂钩原则:子类不能改变整体设计,好莱坞原则,可提供服务,...原创 2019-02-11 10:38:45 · 315 阅读 · 0 评论 -
Strategy-策略模式
策略模式:特点:客户端不会受算法改变影响定义算法族分别封装起来抽象出不变的部分,对新增需求的弹性支持定义:策略模式将可变的部分从程序中抽象分离成算法接口在该接口下分别封装一系列的算法实现原则:开发过程,多用组合,少于继承。(Effective Java)加入抽象接口,由接口代理行为,注入方式有两种 构造和setter函数找出应用中需要变化的部分,把他们独立出来,不要和那些...原创 2019-02-11 14:47:49 · 127 阅读 · 0 评论