设计模式
-
二十五.行为型设计模式——Template Method Pattern(模版方法模式)
定义 定义一个操作中算法的骨架(skeleton),以将一些步骤延缓到子类中实现。模版方法让子类重新定义一个算法的某些步骤而无须改变算法的结构。 UML类图如下: 其中类和对象关系为: 1.AbstractClass(抽象类):定义一个抽象原始的操作,其子类可以重定义它实现一个算法的各个步骤;实现一个模版方法定义一个算法的骨架,此模版方…
-
二十.行为型设计模式——Mediator Pattern(中介者模式)
定义 定义一个对象封装一系列多个对象如何互相作用。Mediator中介者使得对象之间不需要显示地互相引用,从而使得其耦合更加松散。并且还让我们可以独立变化多个对象的互相作用。 UML类图如下: 其中类和对象的关系为: 1.Mediator(抽象中介者):定义一个接口用于与各同事对象(Colleague)之间的通信。 2.Conc…
-
二十六.行为型设计模式——Visitor Pattern(访问者模式)
定义 说明一个操作执行于一个对象结构的成员(elements)中。访问者样式让你定义一个类的新操作而无须改变它操作的这些成员类。 UML类图如下: 其中类和对象的关系为: 1.Visitor(抽象访问者):为对象结构类中每一个ConcreteElement的类声明一个Visit操作。这个操作的名称及标志(signature)识别传出Vi…
-
十五.结构型设计模式——Proxy Pattern(代理模式)
定义 为其他对象提供一个代理或地方以控制对这个对象的访问。当客户向proxy对象第一次提出请求时,proxy实例化真实的对象,并且将请求传给它,以后所有的客户请求都经由proxy传给封装了的真实对象。 proxy模式分为4种,用得最多的是远程和虚拟代理模式: 1. Virtual Proxy(虚拟代理):Proxy不会生成一个真实的耗费代理,直到…
-
十九.行为型设计模式——Iterator Pattern(迭代器模式)
定义 提供一种方法可以访问聚合对象,而不用暴露这个对象的内部表示。 UML类图如下: 其中类和对象的关系为: 1.Iterator(迭代器):迭代器定义访问和遍历元素的接口。 2.ConcreteIterator(具体迭代器):实现迭代器的接口;在遍历时跟踪当前聚合对象中的位置。 3.Aggregate(聚合):定义一个创建…
-
十七.行为型设计模式——Command Pattern(命令模式)
定义 将一个请求封装成一个对象,因此可以参数化多个客户的不同请求,将请求排队,记录请求日志,并且支持撤销操作。 UML类图如下: 其中类和对象之间的关系为: 1. Command(抽象命令):声明执行操作的一个接口。 2. ConcreteCommand(具体命令类):将一个接收者对象绑定于一个动作;实现Execute方法,以调用接…
-
二十一.行为型设计模式——Memento Pattern(备忘录模式)
定义: 在不破坏封装的前提下,捕获并且保存一个对象的内部状态,这样可以将对象恢复到原先保存的状态。 UML类图如下: 其中类和对象的关系为: 1.Memento(备忘录):保持Originator(原发器)的内部状态,根据原发器来决定保存哪些内部的状态;保护原发器之处的对象访问备忘录,备忘录可以有效地利用两个接口,看管者只能调用狭窄…
-
二十三.行为型设计模式——State Pattern(状态模式)
定义 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 UML类图如下: 其中类和对象的关系为: 1.Context(情景类):定义客户应用程序有兴趣的接口;维护一个ConcreteState(具体状态)子类的实例对象。 2.State(抽象状态类):定义一个接口以封装与Context的一个特别状态(St…
-
Java开发中常用的设计模式(二)—单例模式
一. 懒汉式单例 //懒汉式单例类.在第一次调用的时候实例化自己 public class Singleton { private Singleton() {} private static Singleton single=null; //静态工厂方法 public static Singleton getInstance() { if (single =…
-
Java开发中常用的设计模式(一)—工厂模式
一. 准备工作 1. 本文参考自 自己理解的工厂模式,希望对大家有所帮助 二. 开始 以汽车工厂为例,首先有个汽车类的接口 Car,里面有个开车的方法 drive(),然后有个宝马车的类 BMW 和奔驰车的类 Benz 实现了 Car 接口。 public interface Car{ public void drive(); } pu…