8.工厂方法
对象创建模式
-通过对象创建模式来避免new过程中导致的紧耦合
-factory method
-abstract factory
-prototype
-builder
factory method 工厂方法
动机motivation
-创建对象的工作中,需要创建的对象因需求不同而不同
-绕过常规对象创建方法new,提供一种封装机制避免具体对象创建带来的紧耦合
模式定义
-定义一个用于创建对象的接口,让子类决定实例化的具体类
-将类的实例化延迟到子类,解耦合,通常用虚函数
要点
-用来隔离类对象的使用者和具体类型之间的耦合关系,解决new导致的紧耦合关系
-将所要创建的具体对象工作延迟到子类,从而实现一种扩展而非更改的策略
-解决单个对象的需求变化,
-缺点在于要求创建方法/参数相同
一个对象的类型往往声明成抽象的类或者接口,而不是具体的类
实现面向接口的编程体现了依赖抽象原则
9.抽象工厂
abstract factory 抽象工程
动机motivation
-一系列相互依赖的对象的创建,在需求变化时
-绕过唱歌对象创建方法new,封装多系列具体对象创建工作,避免紧耦合
模式定义
-提供一个借口,负责创建一系列相关或者相互依赖的对象,无需指定他们的具体类
要点
-没有多系列对象构建,使用简单工厂即可
-系列对象是指特定系列下的对象之间有相互依赖或作用的关系,不同系列对象之间不能相互依赖
-abstract factory用于应对新系列需求变动
-缺点难以应对新对象的需求变动
10. 原型模式
prototype原型模式
-属于对象创建模式的一种
动机motivation
-结构复杂的对象的创建工作,需求变化使对象结构变化,但接口一致
-向可好程序隔离出一遍对象,使得依赖易变对象的客户程序不随需求改变而改变
模式定义
-通过拷贝原型来创建新的对象
要点
-用于隔离类对象的使用者和具体易变类型之间的耦合关系,要求易变类型拥有稳定的接口
-创建易变类的尸体对象时采用原型克隆的方法,灵活动态创建拥有稳定接口的新对象
-需要注册一个新类的对象原型,然后在需要的地方clone
-clone方法可以用框架中的序列化来实现深拷贝
11. 构建器
builder构建器
动机motivation
-复杂对象的创建中各个部分自对象用一定的算法构成,需求变化使复杂对象各个部分发生变化,但他们组合的算法相对稳定
-提供封装来隔离复杂对象的各个部分,保持系统中稳定的构建算法不随需求改变而改变
模式定义
-将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示
要点
-分步骤构建复杂对象,其中分步骤是稳定的算法,复杂对象各个部分变化频繁
-变化点和封装点
-应对复杂对象各个部分的频繁变动需求
-缺点难以应对分步骤构建算法的变动
-注意不同语言中构造器内调用虚函数的差别
12.门面模式
接口隔离模式
-组件构建过程中接口之间的依赖需要被隔离
-facade
-proxy
-adapter
-mediator
facade门面模式
动机motivation
-客户和组件中关系比较复杂,耦合过多
-简化外部客户程序和系统间的交互接口,将外部客户程序的演化和内部子系统的变化之间的依赖解耦合
模式定义
-为子系统的一组接口提供一个一致稳定的界面,定义一个高级接口,使子系统更加容易使用
要点
-简化了整个组件系统的接口
-内部子系统的任何变化不会影响到facade接口变化
-注重从框架的层次看待整个系统,一种构架
-组件内部是相互耦合关系比较大的一系列组件
13.代理模式
proxy代理模式
动机motivation
-对象创建开销大、操作需要安全控制、需要进程外访问
-在不失去透明操作对象的同时来管理和控制这些对象特有的复杂性,增加一层间接层
模式定义
-为其他对象提供一种代理以控制、隔离、使用接口访问对象
要点
-增加一层间接层
-不一定要求保持接口完整的一致性,能够实现间接控制,损失一定透明性
14.适配器
adapter适配器
动机motivation
-需要将现存的对象放在新的环境中应用,但新环境要求的接口不同
-应对迁移的变化,既能利用现有对象的良好实现,又能满足新应用环境所要求的接口
模式定义
-将一个类的接口转换成客户希望的另一个类的接口,使原本由于接口不兼容而不能一起工作的类可以一起工作
要点
-应用于希望复用一些现存的类,但接口与环境要求不一致
-在遗留代码复用、类库迁移时有用
-对象适配器和类适配器
-类适配器采用多继承实现方式,不推荐使用
-对象适配器采用对象组合方式
15.中介者
mediator中介者
动机motivation
-多个对象互相关联交互,对象之间维持复杂的引用关系,需求更改引起变化
-使用一个中介对象管理对象间关联关系,避免相互交互的对象之间的紧耦合引用关系
模式定义
-用一个中介对象来封装一系列对象交互,中介者使各对象不需要显式的相互引用,编译时依赖到运行时依赖,松散耦合关系,可以独立改变交互关系
要点
-将多个对象间复杂的关联关系解耦合,集中管理多个对象间的控制逻辑
-变多个对象互相关联,为多个对象和一个中介者关联
-facade是解耦合系统间单向对象关联关系
-mediator是解耦合系统内各个对象之间双向的关联关系
.