定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。 目的:工厂模式是为了解耦,把对象的创建和使用的过程分开。 场景:需要生成复杂对象,需要降低耦合度的场景。 定义:在不改变原对象的情况下,动态的给对象添加一些额外的职责。就功能而言,装饰模式相比生成子类更为灵活。 目的:把类的核心职责和装饰功能区分开。可以去除相关类中重复的逻辑。 场景:当系统需要扩展一个类的功能,或者客户端需要动态的给一个对象添加功能,并且使用继承或生成子类会很复杂的时候。 装饰模式体现了"多用组合,少用继承"这一设计原则。 定义:定义了一族算法; 封装了每个算法; 这族的算法可互换代替。 目的:将算法的使用与算法的实现分离开来。 场景:可用来消除大量的条件分支语句。