创建型模式
抽象了对象实例化的过程;
工厂方法模式(将工厂和产品进行抽象;单一产品)
抽象工厂(将工厂和产品进行抽象;产品族)
单例模式(一个类只有一个实例,并提供全局访问点)
与名字对应,这三种模式的重点在于如何创建对象。
工厂方法模式
结构:1抽象工厂、若干具体工厂;1抽象产品(说明是同一类产品)、若干具体产品
优点:
1. 封装了创建具体对象的工作
2. 使得客户代码针对接口编程,保持对变化的关闭
缺点:
虽然保证了工厂方法内的对修改关闭,但对于使用工厂方法的类,如果要添加另一种产品,仍然需要修改实例化的具体工厂类
抽象工厂模式
结构:1抽象工厂、若干具体工厂;多种抽象产品(产品簇)、若干具体产品
单例模式
结构:一个类只有一个实例,并提供全局访问点
要求:只有一个实例,自行实例化,自行提供访问
饿汉式(在声明时就立即创建实例)和懒汉式(需要调用时才创建实例);
结构型模式
如何组合类和对象以获得更大的结构;
装饰者模式(抽象组件、若干具体组件、抽象装饰器、若干具体装饰器)
适配器模式(抽象目标、等待适配的类、适配器)
桥模式(将抽象与实现分离开,聚合)
代理模式(添加一个中介)
桥模式
继承复用:
优点:可以容易的修改或扩展父类的实现
缺点:继承破坏封装,因为父类的实现细节全部暴露给子类,白盒复用;父类的实现如果发生改变,子类必会受影响;继承是静态的,无法在运行时发生改变。
组合优先:
优点:不破坏封装,成员对象的内部细节对新对象保密,黑盒复用;所需依赖少,只依赖接口;是动态的,可以把成员对象动态替换成另一个类型相同的对象。
缺点:对象数量会增加;使用委托会使系统更加复杂。
装饰者模式
优点:与继承更具灵活性,不改变原有对象的情况下扩展一个功能;通过使用不同装饰类以及这些类之间的排列组合,可以实现不同的效果;松耦合;符合开闭原则。
适配器模式
类适配器、对象适配器
代理模式
结构:抽象主题、代理主题、真实主题
行为型模式
描述算法和对象间职责的分配;
观察者模式(抽象目标、具体目标、抽象观察者、具体观察者);
责任链模式(抽象处理者、具体处理者)
策略模式(上下文、抽象策略、具体策略)
观察者模式
本质:触发联动
责任链模式
优点:
降低耦合性;简化对象之间的相互连接;给对象职责的分配带来更多的灵活性;增加一个新的具体请求处理者无需修改原系统代码,只需要在客户端重新建链,
缺点:
不能保证请求一定会被处理;责任链较长时不便于代码调试,系统性能也受到一定影响;建链不当可能会导致循环调用,使系统陷入死循环。
策略模式
体现的设计原则:
开闭原则、组合优先、针对接口编程、封装可变