一,策略模式

定义了算法簇,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于算法的客户。
 
例如在模拟鸭子应用中:
 
首先定义鸭子超类,然后将鸭子的有变化的行为部分提取出来,分别定义飞行接囗类和呱呱叫接囗类,并为这两个接囗编写具体实现类(封装变化);
 
然后在鸭子超类里定义这两个接囗的行为变量;
 
最后在鸭子具体类里,设定这两个接囗行为变量的对象(多用组合、针对接囗编程),就实现了不同鸭子不同的行为( 算法簇 )方式。
 
所体现的OO原则:
1,封装变化
2,多用组合,少用继承(“有一个”可能比“是一个”更好)
3,针对接囗编程,不针对实现编程
 
二,观察者模式
 
在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新。
 
例如在模拟气象站应用里:
首先设定可观察者接囗Observable与观察者接囗Observer;
观察者接囗包含有update()方法,而可观察者接囗类必须提供注册观察者addObserver(Observer)(可用ArrayList来保存注册的观察者)、注销观察者deleteObserver(Observer)和通知观察者方法notifyObserver();
气象站(WeatherData)类实现可观察者接囗;
公告板类(CurrentConditionsDisplay等)实现观察者接囗;
气象站(WwatherData)类实现的 notifyObserver()方法里遍历已注册的公告板(即观察者),并使用公告板对象的update(updatData)方法接送数据;
推送的另一种做法是公告板的update方法并不接受数据参数而是接受Observable对象参数,在方法内用Observable对象的get方法获得数据更新。
 
Java内置了观察者模式,最常用的是java.util.Observable超类(可观察者)和java.util.Observer接囗(观察者)。
 
因为可观察者唯一依赖的东西是一个实现Observer接囗的对象列表,添加或删除观察者,可观察者主题都不要修改,甚至增加新类型的观察者,所要做的也只是在新的类里实现此观察者接囗并注册为观察者,与可观察者代码无关。所以说此列实现了下面新的设计原则:
 
新的设计原则:
为交互对象之间的松耦合设计而努力。(当两个对象之间松耦合,它们依然可以交互,但是不必清楚彼此的细节。)