《Head first 设计模式》读书笔记

对扩展开放,对修改关闭。

一、策略模式

策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

例子:

1)Duck类

各类鸭子继承Duck类

2)FlyBehavior接口

各种不同的飞行行为类实现FlyBehavior接口

3)QuackBehavior接口

各种不同的叫行为实现该接口

---

Duck类里有flybehavior对象,鸭子的飞行行为委托给了flybehavior对象来做,performFly方法里面就是flybehavior对象在fly(),setFlyBehavior方法用来设置flybehavior对象。

飞行行为不再属于鸭子,而是独立出来的一种行为。并不是所有的鸭子都会飞。实现时大概如下:

Duck model = new ModelDuck();
mode.performFly(); //默认不会飞
mode.setFlyBehavior(new FlyRocketPowered()); //设置飞行行为对象,FlyRocketPowered实现了FlyBehavior接口
mode.performFly(); //飞,performFly的里面的实现代码是 new FlyRocketPowered().fly();

 

 二、观察者模式

观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。(让观察者自己更新而不是主题去帮他们更新,因为主题的观察者是不定的,随时可能变动的)

观察者模式提供了一种对象设计,让主题和观察者之间松耦合。

例子:

1)WeatherData类——主题

继承Subject接口,Subject有注册观察者、移除观察者、通知观察者方法

2)状况布告板、统计布告板、预测布告板 ——观察者

继承Observer接口(update数据)、DisplayElement接口(display数据)

 

三、装饰者模式

 装饰者模式动态地将责任附加到对象上。若要扩张功能,装饰者提供了比继承更有弹性的替代方案。

例子:

......

 

posted on 2013-05-07 14:39  zhrj000  阅读(203)  评论(0编辑  收藏  举报