[TOC]
创建型
单例
1 | public class Singleton { |
简单工厂
1 | public interface Product { |
工厂
1 | public interface Product { |
建造者
我们先说一个生活中的小例子,当我们在外面饭店吃饭时,比如点个水煮肉片,这家店可能会辣一点、那家店可能会咸一点、对面那家可能放青菜、隔壁那家可能放菠菜,每家店做出来的都不一样,明明都是水煮肉片却有不同的做法,如果都一样就不会说这家难吃那家好吃了。那再看快餐店,比如KFC,我们点个至尊虾堡,所有人不管在哪个城市哪家店,做法、味道都是一样的,为什么呢,因为它用料、时间、温度等等都是严格规定的,我们只需要下订单就行了,这就是一个建造者模式
1 | public class Director { |
原型
1 | public abstract class ProtoType { |
行为型
责任链
- 链上的每个对象都有机会处理请求
- 链上的每个对象都持有下一个要处理对象的引用
- 链上的某个对象无法处理当前请求,那么它会把相同的请求传给下一个对象
1 | public class PreparationList { |
1 | public abstract class AbstractPrepareFilter { |
1 | public class Study { |
1 | public class WashFaceFilter extends AbstractPrepareFilter { |
1 | public class WashHairFilter extends AbstractPrepareFilter { |
1 | public class test1 { |
迭代器
1 | public interface Aggregate { |
观察者
主题(Subject)具有注册和移除观察者、并通知所有观察者的功能,主题是通过维护一张观察者列表来实现这些操
作的。
观察者(Observer)的注册功能需要调用主题的 registerObserver() 方法。
1 | public interface Observer { |
策略
1 | public interface Strategy |
1 | public class StrategyA implements Strategy |
1 | public class StrategyB implements Strategy |
1 | public class Context |
1 | public class TestMain |
状态模式
状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式的示意性类图如下所示:
1 | public class Context { |
备忘录
备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。
命令模式
每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的。
1 | public class Receiver { |
结构型
适配器
1 | // 目标接口, 具有标准的接口 |
桥接器
1 | public abstract class Abstraction { |
装饰器
1 | public interface Cook { |
1 | public class ChineseCook implements Cook { |
1 | public abstract class FilterCook implements Cook { |
public class WashHandsCook extends FilterCook {
public WashHandsCook(Cook cook) {
this.cook = cook;
}
@Override
public void cookDinner() {
System.out.println("先洗手");
cook.cookDinner();
}
}
1 | public class WashHearCook extends FilterCook { |
Cook cook0 = new WashHandsCook(new ChineseCook());
Cook cook1 = new WashHearCook(new ChineseCook());
cook0.cookDinner();
cook1.cookDinner();
代理
1 | public abstract class AbstractObject { |
1 | public class RealObject extends AbstractObject { |
1 | public class ProxyObject extends AbstractObject{ |
1 | public class Client { |
组合
合成模式把部分和整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和由它们复合而成的合成对象同等看待。
1 | public interface Component { |
1 | public class Composite implements Component { |
1 | public class Leaf implements Component { |
1 | public class Client { |
外观模式
提供了一个统一的接口,用来访问子系统中的一群接口,从而让子系统更容易使用。
1 | public class SubSystem { |
1 | public class Facade { |