博客同步讲解:https://www.unclewang.info/category/note/headfirst/
《Head First设计模式》读书笔记代码实现
官网地址: http://www.wickedlysmart.com/head-first-design-patterns/ 里面直接有源代码
- 找出应用中可能需要变化指出,把他们独立出来,不要和那些不需要变化的代码混在一起
- 针对接口编程,而不是针对实现编程
- 多用组合,少用继承
- 为了交互对象之间的松耦合设计而努力(松耦合让对象之间的相互依赖降到了最低,应对变化的弹性)
- OO最重要的原则——开放关闭原则,类应该对扩展开放,对修改关闭(代码应该如同晚霞中的莲花一样关闭,而晨曦中再次开放)
- 依赖倒置原则——要依赖抽象,不要依赖具体类
- 最少知识原则,只和你的密友谈话 不要过多的类相互依赖,这样修改的时候会有碎片感,不要利用朋友的朋友
- 好莱坞原则,别调用我们,我们会调用你,演员就不要管导演在想什么
- 单一责任原则,类应该只有一个改变的理由
-
策略模式:
链接: http://www.unclewang.info/note/headfirst/448/
题例:鸭子
原则: a:找出应用中可能需要变化之处,把它们独立起来,不要和那些不需要变化。 b:针对接口编程,而不是针对实现编程。 c:多用组合,少用继承。
策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 -
观察者模式:
链接: http://www.unclewang.info/note/headfirst/453/
题例:气象检测应用
原则:为了交互对象之间松耦合设计而努力。
观察者模式 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新。 -
装饰者模式:
链接:http://www.unclewang.info/note/headfirst/456/
题例:星巴兹咖啡连锁店
原则:类应该对扩展开放,对修改关闭。(开放-关闭原则)
装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 -
工厂模式:
链接: http://www.unclewang.info/note/headfirst/467/
题例:披萨店
原则:要依赖抽象,不要依赖具体类。(依赖倒置原则)
抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。 -
单件模式:
链接:http://www.unclewang.info/note/headfirst/471/
题例:无
原则:无
单件模式确保一个类只有一个实例,并提供一个全局访问点。 -
命令模式:
链接: http://www.unclewang.info/note/headfirst/485/
题例:电器自动化
原则:无
命令模式将“请求与接受者”一起封装成对象,对于中间的调用者只需要先找到命令,然后找到谁要执行命令再告诉他。 -
适配器和外观模式
链接: http://www.unclewang.info/note/headfirst/508/
题例:火鸡变鸭子、家庭影院
原则:最少知识原则
改变接口,可能是为了满足新期待,也可能是因为太麻烦,一站式服务 -
模板方法模式
链接: http://www.unclewang.info/note/headfirst/513/
题例:咖啡和茶、排序
原则:好莱坞原则
模板已经想好了结构是什么,模板已经规定好了1234,你只是根据具体情况实现某个1或者3就好 -
迭代器和组合模式
链接: http://www.unclewang.info/note/headfirst/513/
题例:餐馆不停的合并,女招待想直接看到全部菜单
原则:单一责任原则
组合模式通常内部的方法嵌入迭代器模式,两者共同想完成就是遍历不同的数据结构,如果不存在层次结构,直接每个内部实现迭代器,存在层次看成树形,使用组合模式 -
状态模式
链接: https://www.unclewang.info/note/headfirst/530/
题例:糖果售卖机有个流程
原则:单一责任原则
状态模式允许对象在内部状态改变时改变他的行为,而对象看起来好像修改了他的类。当遇到的问题可以归结到一个context上,而且还能有状态图,而且需要很多if判断的话,状态模式简直神器 -
代理模式
链接: http://www.unclewang.info/note/headfirst/545/
题例:糖果机远程监控、图片加载要时间、聊个天不能改别人的信息
原则:
代理分很多种,但是这一章信息量最大,用到了动态代理、rmi很多东西,顺着代理的思路还可以实现aop。 -
复合模式
链接: http://www.unclewang.info/note/headfirst/607/
题例:多种模式混在一起,MVC
原则:
很多优秀的威力强大的设计模式会同时使用多个设计模式,这就是模式的模式——复合模式。 -
与设计模式相处
链接: http://www.unclewang.info/note/headfirst/630/
组合模式通常内部的方法嵌入迭代器模式,两者共同想完成就是遍历不同的数据结构,如果不存在层次结构,直接每个内部实现迭代器,存在层次看成树形,使用组合模式 -
附录A 剩下的模式
链接: http://www.unclewang.info/note/headfirst/644/
包括剩下的9种模式,生成器、蝇量、访问者、备忘录等等