策略模式

书中以模拟鸭子的应用为例引出策略模式,方便理解。

模拟鸭子游戏:游戏中会出现各种鸭子,一边游泳戏水,一边呱呱叫。此系统设计了一个鸭子超类(Superclass),并让各种鸭子继承此超类。

abstract class Duck {
/**
* 所有的鸭子都会呱呱叫(Quack)也会游泳(Swim),
* 所以由超类负责处理这部分的实现代码。
*/
public void quack() {};
public void swim() {};
//每一种鸭子的外观都不同,所以display()方法是抽象的。
public abstract void display();
}
/**
* 每个鸭子子类型(subtype)负责实现自己的display()行为,
* 在屏幕上显示其外观。
*/
class MallardDuck extends Duck {
@Override
public void display() {
//外观是绿头
}
}
/**
* 许多其他类型的鸭子继承Duck类。
*/
class RedheadDuck extends Duck {
@Override
public void display() {
//外观是红头
}
}
继续阅读“策略模式”

Head First设计模式

一、策略模式
1. 模式:定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 。
2. 原则:
①找出程序中会变化的方面,然后将其和固定不变的方面相分离。
②针对接口编程,不针对实现编程。
③多用组合,少用继承。
3. 链接:策略模式

二、观察者模式
1. 模式:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖他的对象都会收到通知,并自动更新。
2. 原则:
④为交互对象之间的松耦合设计而努力。

三、装饰者模式
1. 模式:动态地将责任附加到对象上。想要拓展功能,装饰者提供有别于继承的另一种选择。
2. 原则:
⑤开放-关闭原则:类应该对扩展开放,对修改关闭。

四、工厂模式: