设计模式——模式对比
看过GOF(CPP),大话设计模式(C#),headfirst(JAVA),这三种不同的语言写的设计模式,给我的感觉就是
看不明白,缺点就是 缺少模式之间的对比 + 离实际项目远。
反而一些别的书和博客更让人看的舒服。
1.少用基础类型,封装成类
2.避免过长的消息事件链,构建管理系统进行交互。不要自己交互
五大原则
里氏代换:子类替换基类,基类不要干活
依赖倒转:外部仅仅根据基类编写
迪米特:只跟接口打交道
接口分离:不同接口提供不同功能
最小知道:分层
分成三类
把if打造成策略群:策略状态组合职责链命令模板桥接建造者
保持原代码不变,通过包装提供编码体验:外观适配装饰访问者中介代理
单例原型迭代器享元
消除多个if 用策略/状态
把if条件封装成小类,直接调用小类的内容就可以。
以if条件作为产生小类,状态模式。划分依据是状态
以if内部实现作为小类,策略模式
适配器/代理/外观/装饰器/中介者/访问者:外观模式大家庭
适配器模式:对接口的转换,把a类接口转化为b类接口,改变接口的命名和形态
代理模式:原则上不改变接口的命名和形态。 不想外围改变本体。远程代理。本体是懒加载
装饰着模式:在一个装饰类里面放一个原始类的引用
访问者模式:给对象新增接口的时候,访问代码放到这个访问器
桥接和适配器
桥梁的作用。
桥接:类似策略模式,把具体策略从接口里面拿出来,达到灵活配置和拓展的作用。完备的管理模式。。 从思想上,基本等于,策略模式像雏形,桥接模式更复杂,把策略模式组合到接口类里面管理策略群。对外提供接口使用策略群的不同策略
适配器:接近外观模式,更好的包装已有的模块,不改变已有的代码。
建造者/工厂
工厂:针对对象创建的策略模式
建造者:针对初始化流程的策略模式
组合模式:用树来组织各种策略
职责链:以链表来组织各种策略
命令
命令:计算机按键指令。一个类里面包含了 数据+处理函数
工厂模式
简单工厂:把各地的new和带参数构造封装好类执行
工厂:把简单工厂ifelse封装到拆成小型代工厂,给小类做一个基类做抓手。然后把他注册到原来的简单工厂里面去。从外部来看和简单工厂一样
抽象工厂:小工厂特别多可以归并成一个类合并成大工厂,复制出别的大工厂。而这些大工厂都注册母公司处
访问者
把新增的接口不想写的原代码而是写到这个访问类里面去