Head First Design Pattern

设计原则:
  1. 封装变化,找出设计或代码中可能会需要变化的部分,将其独立出来,不要和那些不需要变化的代码混在一起。
  2. 针对接口编程,而不是针对实现编程。针对超类型(抽象基类或是接口)编程。变量的声明类型应该是超类型,通常来说是一个抽象类或是一个接口,如此,只要是实现了此超类型的类所产生的对象都可以指给这个对象,声明变量时可以不用理会以后执行时真正的对象类型,实现了多态。
  3. 多用组合,少用继承。
  4. 类应该对扩展开放,对修改关闭。
  5. 要依赖抽象,不要依赖具体类。Dependency Inversion Principle.
  6. 最少知识原则:只和欠的密友谈话。
  7. 别调用(打电话给)我们,我们会调用(打电话给)你。
  8. 一个类应该只有一个引起变化的原因。

设计模式:

  1. 代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问。
    Proxy
  2. 状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
    State
  3. 组合模式允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。
    Composite
  4. 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的实现。
    Iterator
  5. 模板方法模式在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤 。
    TemplateMethod
  6. 外观模式提供了一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层接口,让子系统更容易使用。外观没有封装子系统的类,只是组合了一个子系统的类并提供了简化的接口。外观模式的意图不和适配器的转换接口一样,而是简化接口的调用 .Facade
  7. 装饰者模式类似于适配器模式,适配器模式只是包装接口不新增行为,装饰者模式将对象包装起来并增加新的行为和责任。
  8. 适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
    Adapter(对象适配器,以组合的方式,所以不要求多继承)
    ClassAdapter (类适配器,要求要多继承)
  9. 命令模式将“请求”封闭成对象,以便使用不同的请求,队列或者日志来参数化其它对象,命令模式也支持可撤销的操作。
    EncapsulationInvoke
    encapsulateinvoke2
  10. 单件模式确保一个类只有一个实例,并提供一个全局访问点。创建单件模式时需要注意多线程访问加锁的问题。Singleton
  11. 抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
    AbstractFactory
  12. 工厂方法模式是在基类中声明一个虚方法,然后子类override虚方法,根据自己的需要决定怎么创建对象,将类的实例化推迟到了子类,这样就可以解耦,让子类决定决定该创建什么样的对象,同时因为其它逻辑还在父类中定义,所以又规范了子类的行为。
    FacotryMethod
  13. 简单工厂就是将原先在类中的Switch判断类型然后创建不同子类对象的代码重构到一个新的类中,将变化分离出来,如果这个新创建的方法是静态的那么还可以叫做“静态工厂”。
    NewImage
  14. 装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案
    装饰者可以在所委托被装饰者的行为之前/之后加上自己的行为,以达到特定的目的。NewImage
  15. 观察者模式定义了对象之间的一对多依赖,当主题的状态发生变化时,所有的观察者都会得到通知,并做相应的操作。屏幕快照 2012 02 15 下午2 12 52
  16. 策略模式定义了一系列的算法,并将每一个算法以组合的方式封装起来,而且使它们可以相互替换,策略模式让算法独立于使用它的客户而变化。
    Strategy



原文地址:https://www.cnblogs.com/zhangronghua/p/ReadingNotesForHeadFirstDesingPattern.html