定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。 目的:工厂模式是为了解耦,把对象的创建和使用的过程分开。 场景:需要生成复杂对象,需要降低耦合度的场景。 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 目的:阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。 场景:如一个系统中可以存在多个打印任务,但是同时只能有一个正在工作的任务。 定义:使用多个简单的对象一步一步构建成一个复杂的对象。 目的:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 场景:一些基本部件不会变,而其组合经常变化的时候。 定义:抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。或者说,是其他工厂的工厂。 目的:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 场景:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。 定义:用于创建重复的对象,同时又能保证性能。 目的:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 场景:在运行期建立和删除原型。 定义:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。 目的:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。 场景:系统需要使用现有的类,而此类的接口不符合系统的需要。 定义:是用于把抽象化与实现化解耦,使得二者可以独立变化。 目的:将抽象部分与实现部分分离,使它们都可以独立的变化。 场景:实现系统可能有多个角度分类,每一种角度都可能变化。 定义:又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。 目的:将对象组合成树形结构以表示"部分-整体"的层次结构。 场景:您想表示对象的部分-整体层次结构(树形结构),如:文件系统。 定义:在不改变原对象的情况下,动态的给对象添加一些额外的职责。就功能而言,装饰模式相比生成子类更为灵活。 目的:把类的核心职责和装饰功能区分开。可以去除相关类中重复的逻辑。 场景:当系统需要扩展一个类的功能,或者客户端需要动态的给一个对象添加功能,并且使用继承或生成子类会很复杂的时候。 装饰模式体现了"多用组合,少用继承"这一设计原则。 定义:隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。 目的:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 场景:客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。 定义:定义了一族算法; 封装了每个算法; 这族的算法可互换代替。 目的:将算法的使用与算法的实现分离开来。 场景:可用来消除大量的条件分支语句。