重温了Head First 3个设计模式。提炼一下思想,笔记如下。
策略-Strategy
当一个类或类族中重复实现某些同类的方法(behavior)时,考虑使用策略模式。
该模式是将Behavior或算法设计成接口。具体不同的Behavior实现该接口。原来的类中含有算法接口的成员。通过set或constructor设定Behavior或算法。
结合Head First例子记忆。将Duck的Fly,Swim,Quack,Display等都抽象成接口。然后不同的算法实现各自的接口。在Duck中包含有IFlyBehavior,ISwimBehavior等的member。
主要体现了Program to interface, not implement. 即针对接口变成而非针对实现。
装饰-Decorator
主要特征是反复调用类族中相同的方法。设计思路,装饰者包含一个父类组件member。当调用重复的方法时,先调用组件的方法。通常在装饰件构造时传入组件。
结合Head First例子记忆。饮品是咖啡和调料的父类。调料中有一个饮品成员。在构造时传入。在计算cost时,cost = 饮品cost() + 调料cost()
观察者-Observer
当多个类要根据某一变动而作出反应时,考虑引入该模式。主题Subject中有一个观察者队列,包含register,remove,notify方法。观察者有一个主题成员。在观察者的构造函数中传入主题。并进行注册。在Subject有变化时,notify方法中遍历Observer队列,调用Observer的update方法。
结合Head Frist例子。Subject是WeatherData。不同的显示器是Observer。当WeatherData变化时,遍历Oberver队列,调用update方法。
参考以下复习UML中的关联关系
http://blog.csdn.net/sfdev/article/details/3906243