允许您生成一系列相关对象,而无需指定它们的具体类。
允许您一步一步地构造复杂的对象。该模式允许您使用相同的构造代码生成对象的不同类型和表示形式。
提供在超类中创建对象的接口,但允许子类更改将要创建的对象类型。
允许您复制现有对象,而不使您的代码依赖于它们的类。
让您确保类只有一个实例,同时提供对该实例的全局访问点。
允许具有不兼容接口的对象进行协作。
允许您将一个大型类或一组密切相关的类分割为两个单独的层次结构——抽象和实现——它们可以彼此独立地开发。
允许您将对象组合成树状结构,然后将这些结构作为单独的对象使用。
通过将这些对象放置在包含行为的特殊包装器对象中,可以将新行为附加到对象。
提供到库、框架或任何其他复杂类集的简化接口。
通过在多个对象之间共享公共状态部分,而不是将所有数据保存在每个对象中,可以将更多的对象放入可用的RAM中。
让您为另一个对象提供替代品或占位符。代理控制对原始对象的访问,允许您在请求到达原始对象之前或之后执行某些操作。
允许您沿着处理程序链传递请求。在收到请求后,每个处理程序决定是处理该请求还是将其传递给链中的下一个处理程序。
将请求转换为包含有关请求的所有信息的独立对象。此转换允许您将请求作为方法参数传递,延迟或排队执行请求,并支持可撤销操作。
让您遍历集合的元素,而不暴露其底层表示(列表、堆栈、树等)。
让你减少对象之间的混乱依赖。该模式限制了对象之间的直接通信,并强制它们仅通过中介对象进行协作。
使您可以保存和恢复对象以前的状态,而无需透露其实现的详细信息。
允许您定义一个订阅机制,以通知多个对象发生在它们正在观察的对象上的任何事件。
允许对象在其内部状态改变时改变其行为。它看起来好像对象改变了它的类。
允许定义一系列算法,将每个算法放入单独的类中,并使它们的对象可互换。
在超类中定义算法的框架,但允许子类在不改变算法结构的情况下重写算法的特定步骤。
允许将算法与它们所操作的对象分离。