对扩展开放,对修改关闭。
一、策略模式
策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
例子:
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数据)
三、装饰者模式
装饰者模式动态地将责任附加到对象上。若要扩张功能,装饰者提供了比继承更有弹性的替代方案。
例子:
......