Chain of Responsibility模式
责任链模式可以在系统中建立一个链,这样消息可以在首先接收到它的级别处被处理,或者可以定位到可以处理它的对象。
优点
降低了耦合度。
增加向对象指定责任的灵活性。
由于在一个类中产生的时间可以被发送到组成中的其他处理器上,类的集合可以作为一个整体。
在一下情况中,应该使用Chain of Responsibility模式:
多个对象可以处理一个请求,而其处理器确是未知的。
想要在不指定确切的请求接收对象的情况下,向几个对象中的一个发送请求。
可以动态地指定能够处理请求的对象集。
Command模式
命令模式在对象中封装了请求,这样就可以保存命令。将命令传递给方法以及像任何其他对象一样放回该命令。
其优点如下:
将调用操作的对象与知道如何完成该操作的对象相分离。
更容易添加新命令,因为不用修改已有类。
在一下情况中,应该使用Command模式:
要在不同的时间指定、排序以及执行请求。
必须支持Undo、日志记录或事务。
Intepreter模式
解释器模式可以解释定义其语法表示的语言,还提供了用表示来解释语言中的语句的解释器。
其优点如下:
容易修改并扩展语法。
更容易实现语法。
在以下情况中,应该使用Interpreter模式:
语言的语法比较简单。
效率并不是最主要的问题。
Iterator模式
迭代器模式为集合中的有序访问提供了一致的方法,而该集合是独立于基础集合,并与之相分离的。
其优点如下:
支持集合的不同遍历。
简化了集合的接口。
在以下情况中,应该使用Iterator模式:
在不开放集合对象内部表示的前提下,访问集合对象内容。
支持集合对象的多重遍历。
为遍历集合中的不同结构提供了统一的接口。
Mediator模式
中介模式通过引入一个能够管理对象间消息分布的对象,简化了系统中对象间通信。该模式可以减少对象之间的相互作用,从而提高了对象间的松耦合度,并且它还可以独立地改变期间的交互。
其优点如下:
去除对象间的影响。
简化了对象间的协议。
集中化了管理。
由于不在需要直接互传消息,单个组件变得更加简单,而且容易管理。
由于不在需要包含逻辑来处理组件间的通信,组件变得更加通用。
在以下情况中,应该使用Mediator模式:
对象集合需要以一个定义规范但复杂的方式进行通信。
想要在不使用子类的情况下自定义分布在几个对象之间的行为。
Memeto模式
备忘录模式可以保持对象状态的“快照”(snapshot),这样对象可以在不向外界公开其内容的情况下放回它的最初状态。
其优点如下:
保持封装的完整。
简化了放回到初始状态所需的操作。
在以下情况中,应该使用Memento模式:
必须保存对象状态的快照,这样以后就可以恢复状态。
使用直接接口来获得状态可能会公开对象的实现细节,从而破坏对象的封装性。
Observer模式
观察者模式为组件组件向相关接收方广播消息提供了灵活的方法。该模式定义了对象间一到多的对应关系。这样当对象改变状态时,将自动通知并更新它所有的依赖对象。
其优点如下:
抽象了主体与Observer之间的耦合关系。
支持广播方式通讯。
在以下情况中,应该使用Observer模式:
对一个对象的修改涉及对其他对象的修改,而且不知道有多少对象需要进行相应修改。
对象应该能够在不用假设对象标识的前提下通知其他对象。
State模式
状态模式允许对象在内部不状态变化时,变更其行为,并且修改其类。
其优点如下:
定为指定状态的行为,并且针对不同状态来划分行为,使状态转换显示进行。
在以下情况中,应该使用State模式:
对象的行为依赖于其状态,并且该对象必须在运行时根据其状态修改其行为。
操作具有大量以及多部分组成的取决于对象状态的条件语句。
Strategy模式
策略模式定义了一组能够用来表示可能行为的集合的类。这些行为可以在应用程序中使用,来修改应用程序功能。
其优点如下:
另一种子类化方法。
在类自身中定义了每一个行为,这样减少了条件语句。
更容易扩展模型。在不对应用程序进行代码修改的情况下,使用该模式具有新的行为。
在以下情况中,应该使用Strategy模式:
许多相关类只是在行为方面有所区别。
需要算法的不同变体。
算法使用客户端未知的数据。
Template Method模式
模板方法模式提供了在不重写方法的前提下允许子类重载部分方法的方法。在操作中定义算法的框架,将一些步骤由子类实现。该模式可以在不修改算法结构的情况下,让子类重新定义算法的特定步骤。
其优点为:
代码重用的基础技术。
在以下情况中,应该使用Template Method模式:
想要一次实现算法的不变部分,而使用子类实现算法的可变行为。
当子类间的通用行为需要分解、定为到通用类的时候,这样可以避免代码重用问题。
Visitor模式
访问者模式提供了一种方便的、可维护的方法来表示在对象结构元素上要进行的操作。该模式允许在不改变操作元素的类的前提下定义一个新操作。
其优点如下:
更容易添加新操作。
集中相关操作并且排除不相关操作。
在以下情况中,应该使用Visitor模式:
对象结构包含许多具有不同接口的对象类,并且想要对这些依赖于具体类的对象进行操作。
定义对象结构的类很少被修改,但想在此结构之上定义新的操作。