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