当前位置: 移动技术网 > IT编程>软件设计>设计模式 > Head First设计模式读书笔记

Head First设计模式读书笔记

2018年12月21日  | 移动技术网IT编程  | 我要评论
阅读指南: 精读一章内容,手工输入一章代码(注1),与书中描述的思想进行印证,实在搞不懂就放过吧。设计模式绝对不会一次就看懂的。 这本书对于理解设计模式很有帮助,就是例子不太符合中国人的思维模式,但是坚持下去肯定会搞明白的。 全书精华: 1. Chap12的Ducks,通过一点点重构Ducks程序,... ...

阅读指南:

精读一章内容,手工输入一章代码(注1),与书中描述的思想进行印证,实在搞不懂就放过吧。设计模式绝对不会一次就看懂的。

这本书对于理解设计模式很有帮助,就是例子不太符合中国人的思维模式,但是坚持下去肯定会搞明白的。

全书精华:

1. chap12的ducks,通过一点点重构ducks程序,将模式一个个加入其中,帮助对模式的深入理解。

2. chap12的djview,通过一个完整的mvc程序,将observer、strategy、composite以及adapter模式用架构层面的设计整合起来,不仅可以更好地理解单个模式,还可以理解mvc模式。

尽可能对每个模式写出自己的总结

  1. strategy(策略模式):定义一组算法类,用于运行过程中替换算法。
    • 封装变化
    • 多用组合,少用继承
    • 多针对接口编程,少针对实现编程
  2. observer(观察者模式):定义一个主题和一组观察者,可以在主题变化时通知订阅了主题的观察者。
    • strategy封装的是函数调用的算法。
    • observer封装的是传递数据的内容。
    • 交互对象之间强内聚、松耦合。
  3. decorator(装饰模式):本质不变,外面增加一层层装饰。例如:stream的包装。
    • 设计的类,禁止修改,允许扩展。
    • 不采用继承的方式来扩展功能。
  4. factory(工厂模式):所有的工厂都是用来封装对象的创建。
    • simple factory(简单工厂):将业务逻辑与对象创建操作分离开。
    • factory method(工厂方法):把对象的创建工作委托给子类的工厂方法。
    • abstract factory(抽象工厂):把对象的创建工作委托给实现了接口的工厂方法。
    • 依赖于抽象,而不依赖于具体的类。
  5. singleton(单例模式):通过禁止其他对象对自己实例化,而改由自己的静态方法对自己实例化,确保一个类只有一个对象。
  6. command(命令模式):解耦调用者与执行者之间的关系,相互之间的联系通过命令对象完成,调用者只对调用对象的execute()方法发出请求。
  7. 改造已有系统接口,使异构系统也可透明地相互调用。
    • adapter(适配器):将一个类的接口转换成客户期望的另一个接口。例:数据库连接
    • facade(门面模式):将一组接口转换成客户期望的单一接口。例:设备驱动程序
    • 最小知识原则:调用其他方法时,涉及的对象越少越好。
      • 对象调用自己的方法
      • 对象调用作为参数传入的对象的方法
      • 对象调用自己的方法创建的对象或实例的方法
        • (以上三点强调:不要调用其他方法返回的对象的方法)
      • 对象调用自身组件的方法
  8. template(模板模式):封装算法,在一个方法中定义一个算法的框架,而将具体的实现委托给子类。框架中调用的方法为钩子,从而超类控制一切,子类实现钩子等待超类调用。
    • 好莱坞原则:别找我,我会去找你。
  9. collections(集合):
    • iterator(迭代器):遍历集合而无须暴露集合的实现
    • composite(组合模式):可以将对象的集合和单个对象组合在一起。
    • 类应该只有一个改变的理由。
  10. state(状态模式):将状态封闭为对象,将行为封装成方法;新的状态生成新对象,新的行为生成新的方法。
    • 行为不变,状态改变用state
    • 行为改变,状态不变用strategy
  11. proxy(代理模式):采用创建代理对象的方式控制客户端对具体对象的访问。
    • 远程代理管理客户端和远程对象之间的交互;
    • 虚拟代理控制实例化开销大的对象;
    • 保护代理控制客户端对具体对象的访问。
  12. 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种模式的理解之一就是介绍如何针对接口编程

编程思路的演变:针对函数编程→针对对象编程→针对接口编程

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网