0 Intro
责任链模式:同一个请求多个人处理
命令模式:将请求封装成一个对象,然后broker.takeOrder(buyStockOrder)
解释器模式:isMarriedWoman.interpret("Married Julie"));
迭代器模式:通过instance.getIterator()获得迭代器来迭代对象
中介者模式:提供一个对象,作为中介如聊天室
备忘录模式:原始类里面实现saveState()和loadState()方法
观察者模式:当一个对象被修改,依赖它的对象被自动更新
状态模式:创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象; startState.doAction(context);
空对象模式:一个空对象取代 NULL 对象实例的检查
策略模式:表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象context.executeStrategy(10, 5)
模板模式:定义一个模式:initialize();startPlay();endPlay();
访问者模式:使用了一个访问者类,元素的执行算法可以随着访问者改变而改变
1 责任链模式(Chain of Responsibility Pattern)
简单来说就是提供一系列解决方案,有plan a, plan b, plan c等。
责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。
使用场景:
- 有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时刻自动确定。
- 在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
- 可动态指定一组对象处理请求。
2 命令模式(Command Pattern)
将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。就是记录一系列行为,然后执行不同的请求。
broker.takeOrder(buyStockOrder)
何时使用:在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。
3 解释器模式(Interpreter Pattern)
提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。
System.out.println("John is male? " + isMale.interpret("John"));
System.out.println("Julie is a married women? " + isMarriedWoman.interpret("Married Julie"));
4 迭代器模式(Iterator Pattern)
提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
通过instance.getIterator()获得迭代器来迭代对象
5 中介者模式(Mediator Pattern)
主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。
简单来说就是定义个微信群的类。大家都可以用这个类在里面说。
应用实例:
- 中国加入 WTO 之前是各个国家相互贸易,结构复杂,现在是各个国家通过 WTO 来互相贸易。
- 机场调度系统。
- MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者。
6 备忘录模式(Memento Pattern)
保存一个对象的某个状态,以便在适当的时候恢复对象。
应用实例:
简单来说就是用一个类专门存原始类的状态,然后再原始类里面实现saveState()和loadState()方法
- 后悔药。
- 打游戏时的存档。
- Windows 里的 ctrl + z。
- IE 中的后退。
- 数据库的事务管理。
7 观察者模式(Observer Pattern)
当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。
关键代码:在抽象类里有一个 ArrayList 存放观察者们。
应用实例:
- 拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价。
- 西游记里面悟空请求菩萨降服红孩儿,菩萨洒了一地水招来一个老乌龟,这个乌龟就是观察者,他观察菩萨洒水这个动作。
8 状态模式(State Pattern)
在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。根据context状态来更改行为。
简单来说,就是把context作为状态传过去,根据这个状态做不同的策略
使用场景:
- 行为随状态改变而改变的场景。
- 条件、分支语句的代替者。
9 空对象模式(Null Object Pattern)
一个空对象取代 NULL 对象实例的检查。Null 对象不是检查空值,而是反应一个不做任何动作的关系。这样的 Null 对象也可以在数据不可用的时候提供默认的行为。
简单来说就是继承接口实现一个空对象,对继承的方法有对应的实现表示是空对象
10 策略模式(Strategy Pattern)
主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。
和状态模式不同的是之前传递是状态,现在传递的是策略(包括方法)
11 模板模式(Template Pattern)
一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
使用场景:
- 有多个子类共有的方法,且逻辑相同。
- 重要的、复杂的方法,可以考虑作为模板方法。
简单来说,就是顶端接口定义好一样的框架或者执行步骤,每一个步骤可以子类来重载实现
12 访问者模式(Visitor Pattern)
意图:主要将数据结构与数据操作分离。
主要解决:稳定的数据结构和易变的操作耦合问题。
何时使用:需要对一个对象结构中的对象进行很多不同的并且不相关的操作,而需要避免让这些操作"污染"这些对象的类,使用访问者模式将这些封装到类中。