设计模式学习之旅
用于记录我学习设计模式的过程,对设计模式感悟和总结;
希望与对设计模式感兴趣的朋友共同分享、共同讨论、共同成长。
逍遥不羁
这个作者很懒,什么都没留下…
展开
-
模板方法模式-基于继承的代码复用技术
模板方法模式定义定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式结构图...原创 2019-01-18 13:11:44 · 1128 阅读 · 0 评论 -
访问者模式-将数据结构本身和数据报表操作解耦
访问者模式定义提供一个作用于某对象结构中的各元素的操作表示,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。解释补充:数据结构和数据所具有的属性是固定不变的,但数据展示操作可能随时改变,通过访问者模式,可以轻松实现变更数据展示形式。访问者模式结构图访问者模式角色介绍...原创 2019-01-18 09:22:41 · 852 阅读 · 0 评论 -
备忘录模式-关键对象和保持状态分开
备忘录模式定义在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。备忘录模式结构图备忘录模式角色介绍发起人角色:Originator,它是一个普通业务类,当需要保存内部状态时被设计为发起人,负责定义状态的备份范围、创建和恢复备忘录数据。备忘录角色:Memento,负责存储发起人对象的内部状态,在需要的时候提供发起人需要的内...原创 2019-01-04 15:47:15 · 443 阅读 · 0 评论 -
观察者模式-发布与订阅对象之间联动
观察者模式定义定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅模式,发布者对象也是主题对象,对应观察目标对象,订阅者对象对应观察者对象。观察者模式结构图观察者模式角色介绍被观察者:Subject,也称为主题、观察目标、可观察者,它是指被观察的对象。在被观察者中定义了一个观察者集合,提供一系列方法来增加...原创 2019-01-07 09:02:13 · 615 阅读 · 1 评论 -
中介者模式-协调多个对象之间的交互
中介者模式定义用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式结构图中介者模式角色介绍抽象中介者:Mediator,它定义一个接口,该接口用于与各同事对象之间进行通信。具体中介者:ConcreteMediator,它是抽象中介者的子类,通过协调各个同事对象来实现协作行为,它维持了对各个同事...原创 2019-01-11 08:53:46 · 813 阅读 · 0 评论 -
状态模式-处理多种状态转换
状态模式定义允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。状态模式结构图状态模式角色介绍环境类,Context,环境类又称为上下文类,它是拥有多种状态的对象。同时还维护一个抽象状态类State的实例,这个实例定义当前状态,在具体实现时,它是一个State子类的对象。抽象状态类,State,一个抽象类或者接口,声明了各种不同状态对应的方法,而在其子类中实现类这些...原创 2019-01-04 08:47:26 · 1611 阅读 · 0 评论 -
命令模式-将请求发送者和接收者解耦
命令模式定义将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其它对象。解释:将请求封装成对象,就是将请求封装成命令对象;参数化其它对象指的是命令对象将动作和接受者包进命令对象中的过程。命令模式结构图命令模式角色介绍接收者,Receiver,执行与请求相关的操作,它具体实现对请求的业务处理。抽象命令类,Command,一个抽象类或接口,在其中声明了用于执行请求的execute...原创 2019-01-03 20:42:24 · 699 阅读 · 0 评论 -
策略模式
策略模式定义定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换。策略模式结构图策略模式角色介绍抽象策略类,Strategy,一个抽象类或具体类,也可以是接口,负责声明算法接口;客户端面向抽象策略类编程,持有抽象策略类类型成员变量。具体策略类,ConcreteStrategy,它实现了在抽象策略类中声明的算法,在运行时,客户端的抽象策略类型成员变量指向具体策略类对象,使用一种具...原创 2019-01-03 09:27:27 · 201 阅读 · 0 评论 -
责任链模式
责任链模式定义避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。责任链模式结构图责任链模式角色介绍抽象处理者,Handler,一个为抽象类,它定义了一个处理请求的接口;同时它会持有一个抽象处理者类型的成员变量,表示请求链路的下一个处理者。具体处理者,ConcreteHandler,它是抽象处理者的子类,处...原创 2019-01-01 21:32:14 · 233 阅读 · 0 评论 -
享元模式
享元模式定义运用共享技术有效地支持大量细粒度对象的复用。享元模式结构图享元模式角色介绍抽象享元类角色:Flyweight,通常是一个接口或抽象类,定义出产品的内部状态和外部状态的方法或实现。具体享元类角色:ConcreteFlyweight,它实现了抽象享元类,其实例称为享元对象;在具体享元类中为内部状态提供了存储空间。非共享具体享元类角色:UnsharedConcreteFlywe...原创 2018-12-26 12:59:29 · 248 阅读 · 0 评论 -
组合模式-完美处理树形递归结构
组合模式定义将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。组合模式有时候又叫部分-整体模式。组合模式结构图组合模式角色介绍抽象构件角色,Component,一个普通业务构件,它可以是接口或抽象类,为叶子构件和容器构件对象声明接口。叶子构件角色,Leaf,它在组合结构中表示叶子节点对象,叶子节点没有子节点,它实现了在抽象构件中定义的行为...原创 2019-01-01 18:11:17 · 1328 阅读 · 0 评论 -
装饰模式-扩展系统功能
装饰模式定义动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式结构图装饰模式角色介绍抽象构件:Component,一个普通业务组件,可以是接口或抽象类,声明业务接口方法。具体构件,ConcreteComponent,它是抽象构件类的子类,用于定义具体的构件对象,实现了在抽象构件中声明的方法。抽象装饰类,Decorator,一般是一个抽象类...原创 2019-01-01 17:18:49 · 338 阅读 · 0 评论 -
代理模式-扩展-动态代理
动态代理定义运行时动态地创建一个代理类,实现一个或多个接口,并将方法调用转发到指定的类的过程就是动态代理。动态代理结构图动态代理角色介绍抽象主题角色:Subject,一个普通的业务抽象类或接口。真实主题角色,RealSubject,它实现了抽象主题角色定义的接口,是业务逻辑的真正执行者。代理主题角色,这里面不仅仅包含了Proxy,还增加了InvocationHandler接口和MyI...原创 2019-01-01 13:45:06 · 411 阅读 · 0 评论 -
代理模式-控制对象访问
代理模式定义为其它对象提供一种代理以控制对这个对象的访问。代理模式结构图代理模式角色介绍抽象主题角色:Subject,一个普通的业务抽象类或接口。真实主题角色,RealSubject,它实现了抽象主题角色定义的接口,是业务逻辑的真正执行者。代理主题角色,Proxy,它和真实主题角色一样,也实现了抽象主题角色定义的接口,但它包含了对真实主题的引用,在任何需要的时候,把请求委托给真实主题...原创 2019-01-01 12:15:37 · 362 阅读 · 0 评论 -
外观模式
外观模式定义提供一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。外观模式结构图外观模式角色介绍外观角色:Facade,它知道子系统的所有功能和责任;一般情况下,它将所有从客户端发来的请求委派到相应的子系统去,传递给相应的子系统对象处理。子系统角色:SubSystem,在软件系统中可以有一个或者多个子系统角色,每一个子系统可以不是一个单独的类,而是...原创 2018-12-25 09:21:39 · 232 阅读 · 0 评论 -
桥接模式-解决多维度变化的问题
桥接模式定义将抽象和实现放在两个不同的类层次结构中,使得两者可以独立变化。桥接模式结构图桥接模式角色介绍抽象化角色:Abstraction,用于定义抽象类的接口,同时定义了一个Implementor(实现化接口)类型的对象。扩充抽象类角色:RefinedAbstraction,继承抽象类,它实现了在Abstraction中声明的抽象业务方法,在RefinedAbstraction中可以...原创 2018-12-23 21:54:03 · 1226 阅读 · 0 评论 -
适配器模式
适配器模式定义将一个类(Adaptee)的接口,转换成客户期望的另外一个接口(Target)。适配器(Adapter)让原本接口不兼容的类可以合作无间。适配器模式结构图适配器模式角色介绍抽象目标角色:Target,定义目标接口,也就是客户端所需要的接口,客户端面向抽象目标角色编程。适配器角色:Adapter,实现抽象目标接口,关联适配者角色。将客户端发送的请求委托给适配者角色处理。适...原创 2018-12-23 12:42:42 · 237 阅读 · 0 评论 -
原型模式
原型模式概念使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式分为浅克隆方式和深克隆方式,浅克隆通过实现Cloneable接口、并实现Object的clone()方法实现,深克隆通过序列化机制实现。浅克隆原型模式结构图实现Cloneable接口,并实现Object的clone()方法:浅克隆原型模式角色介绍抽象原型角色:Object,作为所有类的默认父类,无需主...原创 2018-12-22 01:36:02 · 202 阅读 · 0 评论 -
单例模式-独一无二的对象
单例模式定义确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式结构图单例模式角色介绍单例模式只有一个角色,就是单例角色,Singleton,它自行实例化,并提供静态方法获取自行实例化的实例。单例模式结构代码单例类:public class Singleton { //定义静态变量 private sta...原创 2018-12-21 13:37:03 · 229 阅读 · 0 评论 -
建造者模式-复杂实例的创建与组装
建造者模式定义将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式结构图建造者模式角色介绍Builder:抽象建造者角色,负责定义创建Product产品对象的各个部件接口,同时定义获取完成Product产品对象的接口。ConcreteBuilder:具体建造者角色,它实现了Builder接口,实现各个部件的具体构造和装配方法,实现了获取最终复杂产品对象结...原创 2018-12-20 12:09:19 · 616 阅读 · 2 评论 -
简单工厂模式到工厂方法模式到抽象工厂模式的发展过程
简单工厂模式结构图:工厂方法模式结构图:抽象工厂模式结构图:从上面三张图的发展可以看出:简单工厂模式将产品对象创建过程进行收拢,统一由工厂方法输出;存在的问题就是工厂方法内部逻辑存在大量的if-else语句;不符合开闭原则和单一职责原则然后发展了工厂方法模式,定义抽象工厂类和负责创建具体产品对象的具体工厂类,每个具体工厂类负责创建一个产品,解决了简单工厂中if-elsey语句,符合...原创 2018-12-19 09:17:36 · 230 阅读 · 0 评论 -
抽象工厂模式
抽象工厂模式定义原创 2018-12-18 15:05:39 · 289 阅读 · 0 评论 -
工厂方法模式
工厂方法模式定义定义一个用于创建对象的接口,但是让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到子类。工厂方法模式结构图工厂方法模式角色介绍Factory:抽象工厂角色,声明了抽象工厂方法,所有具体创建工厂都要继承抽象工厂。ConcreteFactory:具体工厂角色,实现抽象工厂声明的抽象工厂方法,创建并返回一个具体产品实例。Product:抽象产品角色,它是所有产品...原创 2018-12-15 14:02:18 · 380 阅读 · 0 评论 -
简单工厂模式
简单工厂模式定义定义一个工厂类,它可以依据参数的不同返回不同类的实例,被创建的实例具有共同的父类。简单工厂模式结构图简单工厂模式角色介绍Factory:工厂角色,即产品工厂类,负责提供静态工厂方法,依据参数不同,创建并返回不同的产品实例,返回值类型都是抽象产品Product。Product:抽象产品角色,它是所有产品的父类,也是工厂角色工厂方法的返回值类型。ConcreteProdu...原创 2018-12-09 22:31:43 · 333 阅读 · 0 评论 -
学好设计模式的必备知识
面向对象三大特性面向对象有三个特性:封装、继承、多态。面向对象的设计原则UML类图和UML时序图原创 2018-12-08 09:47:11 · 382 阅读 · 0 评论 -
设计模式概述
设计模式历史设计模式起源于建筑领域,由Christopher Alexander(克里斯托弗.亚历山大)首次提出。最早将模式的思想引入软件工程方法学的是1991-1992年以“四人组(Gang of Four,简称GoF,分别是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides)”自称的四位著名软件工程学者,他们在1994年归纳发表了...原创 2018-12-05 16:31:05 · 644 阅读 · 0 评论