
设计模式
Neil Parker
一句道友尽沧桑
展开
-
单例模式的六种写法
基本的实现思路单例模式要求类能够有返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称)。单例的实现主要是通过以下两个步骤:将该类的构造方法定义为私有方法,这样其他处的代码就无法通过调用该类的构造方法来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例;在该类内提供一个静态方法,当我们调用这个方法时,如果类持有的引用不为空就返...原创 2018-03-07 18:36:10 · 393 阅读 · 0 评论 -
调停者模式
调停者模式定义:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。将网状调用关系变成星调用关系。将多对多的关系化解成一对多的关系。类图:源代码:/** * 职员接口 */abstract class Employee { String name; private Mediator mediator;...原创 2018-03-04 20:37:42 · 240 阅读 · 0 评论 -
迭代器模式
迭代器模式定义:迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。类图:Talk is cheap, show me the code:interface Iterator<T> { public boolean hasNext(); public T next();}class ConcreteItera...原创 2018-03-03 23:50:51 · 175 阅读 · 0 评论 -
命令模式
将请求封装成命令对象,请求的具体执行由命令接收者执行;命令发送者与命令执行者解耦;可扩展命令模式:对请求排队或者记录请求日志,以及支持可撤销的操作;每一个命令都是一个操作:请求的一方发出请求,要求执行一个操作;接收的一方收到请求,并执行操作。一个开关灯例子,客户端发送开关灯命令,命令调用者负责调用调用执行命令;抽象命令:public interface Command { public v...原创 2018-03-02 15:41:14 · 145 阅读 · 0 评论 -
职责链模式
一、职责链模式介绍职责链模式:将能够处理同一类请求的对象连成一条链,使这些对象都有机会处理请求,所提交的请求沿着链传递。从而避免请求的发送者和接受者之间的耦合关系。链上的对象逐个判断是否有能力处理该请求,如果能则就处理,如果不能,则传给链上的下一个对象。直到有一个对象处理它为止。场景:1、打牌时,轮流出牌2、接力赛跑3、请假审批4、公文审批职责链UML图:Handler:表示处理请求的接口,在这个...原创 2018-03-02 15:14:19 · 219 阅读 · 0 评论 -
享元模式
享元模式通过共享避免大量相同对象的开销。简单说就是共享对象。结构图源代码public interface Flyweight { //一个示意性方法,参数state是外蕴状态 public void operation(String state);}public class ConcreteFlyweight implements Flyweight { privat...原创 2018-03-01 19:18:01 · 206 阅读 · 0 评论 -
桥接模式,组合模式、门面模式
一、桥接模式桥接模式的定义:将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。桥接模式结构图:桥接模式中得角色:抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。实现化(Implementor)角色:这个角...原创 2018-03-01 17:13:16 · 1626 阅读 · 0 评论 -
代理模式、装饰器模式、适配器模式
代理模式代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。 简单的说是控制转移。装饰模式装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。简单的说就是功能增强。适配器模式适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。简单的说就接口转换。代理模式 vs 装饰器模式这两个图可能使我们产生困惑...原创 2018-02-24 11:35:56 · 281 阅读 · 0 评论 -
简单工厂模式、工厂方法模式、抽象工厂模式对比
一、简单工厂模式一个具体工厂创建一种产品源代码public interface Cpu {public void calculate();}public class IntelCpu implements Cpu {/** * CPU的针脚数 */ private int pins = 0;public IntelCpu(int pins){this.pins = pins;...原创 2018-02-24 11:13:23 · 686 阅读 · 0 评论