《Head First 设计模式》笔记0-引子
可以用下面的方法让你的大脑就范
- 慢一点,你理解的越多,需要记的就越少。
- 勤做练习,自己记笔记。
- 上床睡觉之前不要再看别的书了,或者至少不再看其他有难度的东西。
- 要喝水,而且要多喝点水。
- 大声说出来。
- 听听你的大脑怎么说。
- 要有点感觉!
- 设计一点东西!
要点
- 知道 OO 基础,并不足以让你设计出良好的 OO 系统。
- 良好的 OO 设计必须具备可复用、可扩展、可维护三个特性。
- 模式可以让我们建造出具有良好的 OO 设计质量的系统。
- 模式被认为是历经验证的 OO 设计经验。
- 模式不是代码,而是针对设计问题的通用解决方案。你可把它们应用到特定的应用中。
- 模式不是被发明,而是被发现。
- 大多数的模式和原则,都是着眼于软件变化的主题。
- 大多数的模式都允许系统局部改变独立于其他部分。
- 我们常把系统中会变化的部分抽出来封装。
- 模式让开发人员之间有共享的语言,能够最大化沟通的价值。
设计原则
封装变化。找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。P9。
把会变化的部分取出并封装起来,以便以后可以轻易地改动或扩张此部分,而不影响不需要变化的其他部分。
针对接口编程,而不是针对实现编程。P11。
“针对实现编程”的做法:
Dog d = new Dog();d.bark();
“针对接口编程”的做法:
Animal animal = new Dog();animal.makeSound();
或者:Animal animal = getAnimal();animal.makeSound();
多用组合,少用继承。P23。
为了交互对象之间的松耦合设计而努力。P53。
类应该对扩展开放,对修改关闭(开闭原则)。P86。
要依赖抽象,不要依赖具体类(依赖倒置原则)。P139。
不要让“高层组件”依赖“低层组件”,而且,不管“高层组件”还是“低层组件”,两者都应该依赖于抽象。
避免违反该原则的几个方针:- 变量不可以持有具体类的引用。
如果使用new,就会持有具体类的引用,可以使用工厂来避开这种引用。 - 不要让类派生自具体类。
如果派生自具体类,就会依赖具体类,可以派生自抽象或接口。 - 不要覆盖基类中已实现的方法。
如果覆盖基类中已实现的方法,那么基类就不是一个真正适合被继承的类。基类中已实现的方法应该被所有子类所共享。
- 变量不可以持有具体类的引用。
最少知识原则:只和你的密友谈话。P265。
解释:当你设计一个系统时,不管是任何对象,你都要注意与它交互的类有哪些,并注意它和这些类是如何交互的,尽量避免过多的类耦合在一起,带来维护成本的上升。这个原则推荐的一些方针:就任何对象而言,在该对象的方法内,我们只应该调用一下范围的方法:
该对象本身
被当作方法的参数而传递进来的对象
此方法所创建或实例化的任何对象
对象的任何组件。
如果对象是调用其他的方法的返回结果,不要调用该对象方法。
public float getTemp(){ // 没有采用该原则 Thermoment thermoment = station.getThermoment(); return thermoment.getTemperature(); } public float getTemp(){ // 采用该原则 return station.getTemperature(); }
别找我,我会找你。P296。
高层组件对待底层组件的方式是“别调用我们,我们会调用你”。
模板方法模式,工厂模式,观察者模式,都使用了该原则。
好莱坞原则和依赖倒置原则:
- 依赖倒置原则教我们尽量避免使用具体类,而多使用抽象。
- 而好莱坞原则是用在创建框架或组件上的一种技巧,好让低层组件能够被挂钩进计算中,而且又不会让高层组件依赖底层组件。
- 两者的目标都是在于解耦。
单一责任:一个类应该只有一个引起变化的原因。P339。
书中类图示意
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com
文章标题:《Head First 设计模式》笔记0-引子
文章字数:1.1k
本文作者:Bin
发布时间:2018-06-25, 23:17:57
最后更新:2019-08-06, 00:07:35
原始链接:http://coolview.github.io/2018/06/25/Head-First-%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/%E3%80%8AHead-First-%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%8B%E7%AC%94%E8%AE%B00-%E5%BC%95%E5%AD%90/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。