Boolan微专业-设计模式(总结)

设计模式总结

1. 一个目标

管理变化,提高复用!

2. 两种手段

分解 vs. 抽象

3. 八大原则

  1. 依赖倒置原则
  2. 开放封闭原则
  3. 单一职责原则
  4. Liskov 替换原则
  5. 接口隔离原则
  6. 对象组合优于类继承
  7. 封装变化点
  8. 面向接口编程

4. 五大技法

  1. 静态 -> 动态
  2. 早绑定 -> 晚绑定
  3. 继承 -> 组合
  4. 编译时依赖 -> 运行时依赖
  5. 紧耦合 -> 松耦合

5. 简单总结(重点模式加粗、次重点斜体)

  1. Template Method:将固定结构中变化的部分定义为虚函数,由子类去实现,即晚绑定。
  2. Strategy:将算法封装起来,使之可以相互替换。变"if...else..."为"虚函数"
  3. Observer/Event:一种“通知依赖关系”,订阅者自己订阅,通知者在需要通知的时候遍订阅者,完成消息的发送。
  4. Decorator:"is a" + "has a"完成对类功能的扩展,避免因继承而导致的类膨胀。is a是为了维持对外界的接口一致,has a是为了在扩展操作完毕后,调用对象真正的处理流程。其实是在其基础操作外加了一层装饰。
  5. Bridge:将“实现”和“业务”剥离开来,在“业务”类中包含一个执行“实现”类的指针。实现两者的解耦。如Login的逻辑操作,与平台的具体实现剥离开来,在运行时再装配。
  6. Factory Method:绕开new,将对象创建的工作专门的交给一个工厂来完成,延迟实例化到子类。实现对new的封装,隐藏类名,避免构造参数。
  7. Abstract Factory:提供一个接口负责创建一些列相关对象。如各种数据库的连接、命令和读取器对象。
  8. Prototype:使用Clone创建对象,用于结构复杂对象(需保留中间状态)的创建工作。如 Copy On Wirte
  9. Builder:模板方法在对象创建中的应用---算法结构稳定,部分元素变化。
  10. Facade:解耦系统内与系统外对象间的复杂关系。架构层次的模式。
  11. Proxy:提供一个代理封装直接使用对象的复杂性。
  12. Adapter:旧接口 --> 新接口。如STL中的queue、stack、deque
  13. Mediator:解耦系统内各对象间的关系。架构层次的模式。
  14. Singleton:过构造器,提供一种机制来保证一个类只有一个实例,提高性能和效率。
  15. Flyweight:避免大量细粒度对象的性能消耗。各种单例对象的集合,中心思想是有就给,没有才创建。
  16. State:解耦对象操作和状态转换间的紧耦合,与Stategy策略模式异曲同工,将状态对象化。在每次执行完操作后,需改变State,保证后续逻辑的正确运行。
  17. Memento:过时的模式,旨在保证封装性的同时,实现对对象状态的良好保存和恢复。如今的语言可利用序列化等方式实现上述需求,且效率更高。
  18. Composite:解耦客户代码与复杂的对象容器结构。本质是一个树形结构,核心在于复合节点依次遍历子节点,叶子节点则执行具体操作,对外保持接口一致。
  19. Iterator:实现对容器的透明遍历。更推荐用模板实现而非面向对象。(模板是编译时多态、虚函数是运行时多态,前者效率更高)
  20. Chain of Resposibility:解耦请求者和接受者。利用单向列表,让请求在接受链上传递直到被处理。
  21. Command:过时的模式,解耦“行为请求者”和“行为实现者”,将“行为”对象化,使之可以被传递、存储和组合。被C++中的函数对象所替代。
  22. Vistor:当子类数量确定时,解决类层次结构中行为增加的问题。核心是Double Dispatch,条件较为苛刻,使用较少。
  23. Interpreter:将问题表达为某种语法规则下的句子,然后构建一个解析器去解释这样的句子。如字符串的四则远算,人民币的大小写转换等。其难点是应用场合的定义。

6. Tips

  • 不要为了模式而模式
  • 关注抽象类&接口
  • 理清变化点和稳定点
  • 审视依赖变化
  • 要有Framework和Application的区隔思维
  • 良好的设计时演化的结果

7. 成长之路

  • “手中无剑,心中无剑”:见模式而不知
  • “手中有剑,心中无剑”:可以识别模式,作为应用开发人员使用模式
  • “手中有剑,心中有剑”:作为框架开发人员为应用设计某些模式
  • “手中无剑,心中有剑”:忘掉模式,只有原则
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352