框架就是程序中不变的部分!
1 单例模式
- 饿汉方式 利用类内部的static对象实现单利。简单快捷但是不符合延迟实例化
- 懒汉方式 类内存放static对象指针,空指针时实例化否则直接返回原对象。延迟了实例化,多线程下不能保证单例!
- 加锁方式 对请求单例对象的流程加锁以改进懒汉模式,效率过低!
- 双检测锁方式 首先检测实例指针是否为空,为空则进入加锁,锁后再检测。
2 简单工厂模式
- 对象初始化较为复杂 或 多个同一类对象 多处需要初始化时,利用工厂类封装对象的生成过程。使对象的产生与适用分离!
3 工厂模式
- 简单工厂类需要生成的产品过多,或生产方式不同会导致工厂类过于臃肿难以维护。
- 故将复杂而单一的工厂类拆分为多个小工厂,小工厂通过继承工厂基类实现接口的统一,同时每个小工厂只负责一类产品实现职能的单一化。
- 客户端通过统一的工厂基类 提领不同的 具体工厂,利用统一的抽象接口生成不同的产品。
- 简单工厂即参数化的工厂;参数化的工厂可以被继续继承以更改其创建行为,子工厂可以回调父工厂默认方法
- 工厂模式有两种不同的情况,其一工厂类为抽象类,不提供默认产品;其二工厂类提供默认产品
- 缺点是 特定产品 必须要有相应工厂;可以利用C++模板,为每个产品自动推导工厂类型
- product* DoMakeProduct()
4 抽象工厂模式
- 当产品系列不再单一时,则需要多套工厂;修改工厂模式的工厂基类,增加接口以生成不同的产品系列。具体工厂实现工厂基类的多个接口以使得单个工厂可以生产多个不同系列的产品。即为抽象工厂。
- 利用简单工厂改进抽象工厂。抽象工厂的客户端需要实例化一个工厂,再利用不同接口生产不同产品。为工厂基类定义新的生产接口作为具体工厂的代理,并在工厂基类中保存需要实例化的具体工厂种类,这样在需要某种产品时仅需调用基类相应的static方法即可。
- 通常的抽象工厂的实现 为 工厂方法的集合
- 工厂方法采用的是类继承机制(生成一个子类,重写该工厂方法,在该方法中生产一个对象)。而抽象工厂采用的是对象组合机制,专门定义“工厂”对象来负责对象的创建。对象组合的方式就是把“工厂”对象作为参数传递
5 建造者模式
- 将抽象工厂模式中工厂的生产功能保留,将产品的组装功能(对产品的使用)抽取出来作为指挥器,实现了单一职责原则,可以更容易地修改产品组装流程
- 建造者仅提供构建对象的方法而隐藏其内部实现,构建方法由指挥者逐步调用并于最后 从建造者内部获取对象
- 抽象工厂的一个具体工厂对象提供了获取一系列组件的方法,由客户直接使用这些对象进行工作
6 原型模式
- 注意深浅拷贝
7 适配器模式
- 适配器内包含需要被接口转换的对象,适配器利用内部对象的方法实现某接口基类。客户通过接口基类操作被适配的对象
- 两种具体实现方案。1被适配者由适配器私有继承 称为类适配器,无法适配子类,但是可以更改被适配者的原有行为; 2被适配者组合进入适配器 称为对象适配器,可适配一个系列的类,但是被适配者由新功能时不方便添加
- 双向适配器
8 桥接模式
- 客户直接使用的接口形成一个继承体系,使得接口可以按需扩展。而具体的基本操作再定义一个继承体系,客户直接使用的接口内维护具体操作的对象。客户操纵接口发出的请求转由基本操作集完成。
9 组合模式
- 对拥有嵌套关系的对象进行建模,这些对象具有相同的工作行为,因而对客户展现了同一的使用界面。但是事实上这些对象分为composite 和 leaf两类,前者相比后者多了对子对象的管理行为
10 装饰模式
- 派生类内部包含的基类的引用,多个派生内的对象便可以层层嵌套,每个派生类在调用自己的职责时同时调用 包含着的 上一层对象的职责,层层解退即可实现 对核心功能的 层层装饰!
- 经常为窗口组件添加图形装饰
8 外观模式
- 为复杂的子系统抽象一个简洁的用户接口
8 状态模式
- 需要有一个上下文类作为环境为客户调用,环境类内含状态基类(可以表示任何具体状态派生类),每一个状态派生类实现自身状态的功能,同时可以接收环境类为参数,修改其中的状态类,以达到状态转移的目的
10 代理模式
- 工作类实现了一组具体的接口,代理类也实现同样的接口,同时包含了具体工作类。代理类的具体工作方法借助具体工作类完成