集中相关对象之间复杂的沟通和控制方式。
在不违反封装的情况下获得对象的内部状态,在需要时可以将对象恢复到最初状态。
提供一种顺序访问聚合对象元素的方法,并且不暴露聚合对象的内部表示。
为一个对象结构(比如组合结构)增加新能力。
定义对象之间的一对多依赖,当一个对象状态改变时,它的所有依赖都会收到通知并且做出反应。
为语言创建解释器,通常由语言的语法和语法分析来定义。
提供一种顺序访问聚合对象元素的方法,并且不暴露聚合对象的内部表示。
定义一系列算法,封装每个算法,并使它们可以互换。可以让算法独立于使用它的客户端。
将命令(请求)封装在对象中,以便使用命令来参数化其它对象,或将命令对象放入队列中排队,或将命令对象的操作记录到日志中,以及支持可撤销的操作。
定义算法框架,并将一些步骤的实现延迟到子类。
通过模板方法,子类可以重新定义算法的某些步骤,而不用改变算法的结构。