目录
“对象创建”模式
工厂方法是抽象工厂的特例
●抽象工厂是一堆关联工厂组合成一个工厂,实现多个关联对象高内聚创建,组合起来的一个工厂实现对象创建脱离具体依赖;
●工厂方法是一个工厂,实现一个对象创建脱离具体依赖;
原型模式
●适用于待创建对象比较复杂,原对象有状态需要保留时,原型模式优于抽象工厂;
●实现拷贝构造+克隆接口;
构建器模式 Builter
●复杂对象构建,对象有多个子部分构成
●各部分组合方法稳定;
●各子部分变化频繁;
“对象性能”模式
享元模式 FlyWeight
●通过共享减少内存消耗。
单例模式
●对象全局唯一;
●确保逻辑或效率良好。
“接口隔离”模式
门面模式Facade
●添加间接接口层;(稳定)
●简化子系统调用;(松耦合)
代理模式Proxy
●对象直接访问较麻烦;
如:创建开销大、需安全控制、需进程外访问、分布式等
●接口代理实现控制;
适配器模式Adapter
●旧接口匹配新接口;
●类适配器;(多继承,不推荐)
●对象适配器;(推荐)
●旧对象做接口参数:
示例:
内核deque
●std::stack
●std::queue
中介者模式Mediator
●适用多对象相互关联;
●封装变动的关联关系为中介者;
●编译时依赖转运行时依赖;
“状态变化”模式
状态模式State
●对象行为随状态变化而变化;
●替换if else或者枚举;
●状态封装为对象;(对比策略模式)
备忘录模式Memento
●状态保存与恢复;
●核心是信息隐藏;
●深拷贝、序列化…;
“行为变化”模式
命令模式Command
●行为请求与实现分离,Redo、Undo;
●行为抽象为对象;
●多命令封装为复合命令;
●对比:函数对象更灵活,性能更优。
“数据结构”模式
解耦组件内部数据结构与客户程序
组合模式Compsite
●对象组合为树形结构表征“部分-整体”层次关系;
●单对象与组合对象使用方式一致;(1:n->1:1)
迭代器模式Iterator
●集合顺序访问;
●性能问题:泛型模板编译时多态 替换面向对象运行时多态。
职责链China of Responsibility
●多对象可处理同一任务;
●同一时刻一个任务仅可一个对象处理;
访问器模式Visitor
●类层次及数量稳定;
●类内接口变更及扩展变动;
●类预先定义带Visitor基类参数的扩展虚接口;
●双重解析实现。
解析器模式
特定领域复杂变化中抽象出特定的语法规则;
总结
目标:管理变化,提高复用;
两种手段:分解、抽象;
八大原则:
●依赖倒置
●开放封闭
●单一职责
●里氏替换
●接口隔离
●组合优于继承
●封装变化点
●面向接口编程
重构技法
●静态—>动态
●早绑定—>晚绑定
●继承—>组合
●编译时依赖—>运行时依赖
●紧耦合—>松耦合