Head First设计模式读书笔记
阅读指南:
精读一章内容,手工输入一章代码(注1),与书中描述的思想进行印证,实在搞不懂就放过吧。设计模式绝对不会一次就看懂的。
这本书对于理解设计模式很有帮助,就是例子不太符合中国人的思维模式,但是坚持下去肯定会搞明白的。
全书精华:
1. Chap12的Ducks,通过一点点重构Ducks程序,将模式一个个加入其中,帮助对模式的深入理解。
2. Chap12的DJView,通过一个完整的MVC程序,将Observer、Strategy、Composite以及Adapter模式用架构层面的设计整合起来,不仅可以更好地理解单个模式,还可以理解MVC模式。
尽可能对每个模式写出自己的总结
- Strategy(策略模式):定义一组算法类,用于运行过程中替换算法。
- 封装变化
- 多用组合,少用继承
- 多针对接口编程,少针对实现编程
- Observer(观察者模式):定义一个主题和一组观察者,可以在主题变化时通知订阅了主题的观察者。
- Strategy封装的是函数调用的算法。
- Observer封装的是传递数据的内容。
- 交互对象之间强内聚、松耦合。
- Decorator(装饰模式):本质不变,外面增加一层层装饰。例如:Stream的包装。
- 设计的类,禁止修改,允许扩展。
- 不采用继承的方式来扩展功能。
- Factory(工厂模式):所有的工厂都是用来封装对象的创建。
- Simple Factory(简单工厂):将业务逻辑与对象创建操作分离开。
- Factory Method(工厂方法):把对象的创建工作委托给子类的工厂方法。
- Abstract Factory(抽象工厂):把对象的创建工作委托给实现了接口的工厂方法。
- 依赖于抽象,而不依赖于具体的类。
- Singleton(单例模式):通过禁止其他对象对自己实例化,而改由自己的静态方法对自己实例化,确保一个类只有一个对象。
- Command(命令模式):解耦调用者与执行者之间的关系,相互之间的联系通过命令对象完成,调用者只对调用对象的execute()方法发出请求。
- 改造已有系统接口,使异构系统也可透明地相互调用。
- Adapter(适配器):将一个类的接口转换成客户期望的另一个接口。例:数据库连接
- Facade(门面模式):将一组接口转换成客户期望的单一接口。例:设备驱动程序
- 最小知识原则:调用其他方法时,涉及的对象越少越好。
- 对象调用自己的方法
- 对象调用作为参数传入的对象的方法
- 对象调用自己的方法创建的对象或实例的方法
- (以上三点强调:不要调用其他方法返回的对象的方法)
- 对象调用自身组件的方法
- Template(模板模式):封装算法,在一个方法中定义一个算法的框架,而将具体的实现委托给子类。框架中调用的方法为钩子,从而超类控制一切,子类实现钩子等待超类调用。
- 好莱坞原则:别找我,我会去找你。
- Collections(集合):
- Iterator(迭代器):遍历集合而无须暴露集合的实现
- Composite(组合模式):可以将对象的集合和单个对象组合在一起。
- 类应该只有一个改变的理由。
- State(状态模式):将状态封闭为对象,将行为封装成方法;新的状态生成新对象,新的行为生成新的方法。
- 行为不变,状态改变用State
- 行为改变,状态不变用Strategy
- Proxy(代理模式):采用创建代理对象的方式控制客户端对具体对象的访问。
- 远程代理管理客户端和远程对象之间的交互;
- 虚拟代理控制实例化开销大的对象;
- 保护代理控制客户端对具体对象的访问。
- Compound(复合模式):MVC-Model,View,Controller
- Model与View之间使用Observer模式。Model是Subject,View是Observer,当Model改变时通知View发生改变。View只从Model中获取数据(例如:调用Model的getXXX()方法),不修改Model的数据(例如:不调用Model的SetXXX()方法),不操作Model的行为(例如:不调用Model的行为方法)。
- Controller与View之间是Strategy模式。View只对Controller的接口编程,不与具体的Controller实现耦合,从而可以面对不同的Controller实现不同的行为。
- View自身使用Composite模式。
- 还可以使用Adapter模式,使已经存在的Controller和View与Model适配。
注:
1. 源代码一定要去下载,书上的代码内容不够
2. 设计模式并不复杂,这23种模式的理解之一就是介绍如何针对接口编程
编程思路的演变:针对函数编程→针对对象编程→针对接口编程
Head First设计模式读书笔记的更多相关文章
- HeadFirst设计模式读书笔记--目录
HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern) HeadFirst设计模式读书笔记(2)-观察者模式(Observer Pattern) HeadFirst设计 ...
- Head First 设计模式读书笔记(1)-策略模式
一.策略模式的定义 策略模式定义了算法族,分别封装起来,让它们之间可以互换替换,此模式让算法的变化独立使用算法的客户. 二.使用策略模式的一个例子 2.1引出问题 某公司做了一套模拟鸭子的游戏:该游戏 ...
- JavaScript设计模式:读书笔记(未完)
该篇随我读书的进度持续更新阅读书目:<JavaScript设计模式> 2016/3/30 2016/3/31 2016/4/8 2016/3/30: 模式是一种可复用的解决方案,可用于解决 ...
- Head First 设计模式读书笔记
在网上学习了一段时间设计模式,总感觉不系统,很容易忘,最近买书,学习了<Head First设计模式>,受益匪浅,特做此记录,以便激励自己不断的向后学习. 原书JAVA版本,本次学习记录及 ...
- <代码整洁之道>、<java与模式>、<head first设计模式>读书笔记集合
一.前言 几个月前的看书笔记 ...
- head first 设计模式读书笔记 之 策略模式
作为一个php开发者,深知曾经很多程序员都鄙视php,为什么呢?因为他们认为php的语法是dirty的,并且由于开发者水平参差不齐导致php的代码更加乱上加乱,维护起来简直一坨shit一样.随着php ...
- JavaScript设计模式 -- 读书笔记
JavaScript设计模式 一. 设计模式 一个模式就是一个可重用的方案: 有效的解决方法.易重用.善于表达该解决方案: 未通过"模式特性"测试的模式称为模式原型: 三规则:适用 ...
- JavaScript设计模式读书笔记之一:接口
接口 在JavaScrip中模仿接口 用注释描述接口 用属性检查模仿接口 用鸭式辨型模仿接口 依赖于接口的设计模式 工厂模式 组合模式 装饰者模式 命令模式 接口 在JavaScrip中模仿接口 用注 ...
- HeadFirst设计模式读书笔记之工厂模式
1. 简单工厂 1. 你开了一家披萨店,点披萨的方法可能是这样: public Pizza orderPizza(String type) { Pizza pizza; if (type.equals ...
随机推荐
- typeconfig.json配置说明
如果一个目录下存在一个tsconfig.json文件,那么它意味着这个目录是TypeScript项目的根目录. 不带任何输入文件的情况下调用tsc,编译器会从当前目录开始去查找tsconfig.jso ...
- 解决VS2019中.net core WPF 暂时无法使用 Designer 的临时方法
目录 解决 VS2019 中.net core WPF 暂时无法使用 Designer 的临时方法 安装 vs 2019 professional/enterprise版本 在vs的设置里,勾选.NE ...
- [区块链\理解BTCD源码]GO语言实现一个区块链原型
摘要 本文构建了一个使用工作量证明机制(POW)的类BTC的区块链.将区块链持久化到一个Bolt数据库中,然后会提供一个简单的命令行接口,用来完成一些与区块链的交互操作.这篇文章目的是希望帮助大家理解 ...
- k8s使用helm打包chart并上传到腾讯云TencentHub
本文只涉及Helm的Chart操作,不会对其他知识进行过多描述.至于安装这块,麻烦自行百度吧,一大堆呢. 在容器化的时代,我们很多应用都可以部署在docker,很方便,而再进一步,我们还有工具可以对d ...
- 数据结构与算法(十):红黑树与TreeMap详细解析
本文目录 一.为什么要创建红黑树这种数据结构 在上篇我们了解了AVL树,既然已经有了AVL这种平衡的二叉排序树,为什么还要有红黑树呢? AVL树通过定义我们知道要求树中每一个结点的左右子树高度差的绝对 ...
- Redis调用的流程(新手使用)
就用查省市为例,别人还没查就把所有都弄好,很浪费资源和时间,redis是为了存储常用的查询操作的[结果],以此来减少直接查询数据库的次数,以下内容仅供参考,请勿照抄.(如有说得不好之处,请指点.) 言 ...
- SQL 横转竖 、竖专横(转载) 列转行 行转列
普通行列转换 问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 张三 数学 张三 物理 李四 语文 李四 数学 李四 物理 想变成(得到如下结果): 姓名 语文 数学 物理 --- ...
- 【JDBC 笔记】
JDBC 笔记 作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 对应pdf版:https://download.csdn.net/download/qq_22430159/10754554 没有积分 ...
- HTML文本框样式大全
粘贴自Christian.Cao 博客园地址 : https://www.cnblogs.com/QQ862668193/p/6893797.html 输入框景背景透明:<input style ...
- 5分钟解决google play上架App设置隐私政策声明问题
本文同步自javaexception 问题: 在我们的app上架到google play后,为了赚点小钱,就集成google ads,然而这会引发一个新的问题,那就是设置隐私政策声明的问题,通常我们会 ...