本文字数为 1388 字, 预计读完大约需要 4 分钟
策略模式
利用组合而不是继承来实现功能
- 定义我们需要的主类’
- 定义飞行的动作
- 定义鸭子叫的动作
- 使用我们的框架实现具体的鸭子类
定义了算法族,分别封装起来,让它们之间可以互相替换 此模式让算法的变化独立于使用算法的客户 利用组合,我们最大化了代码的复用
public abstract class Duck {
// 利用组合将功能添加到鸭子类里面
protected FlyBehavior flyBehavior;
protected QuackBehavior quackBehavior;
public Duck() {}
// 每个鸭子的绘制显示方法,因为绘制方法不一致,所以给子类实现
public abstract void display();
public void performFly() {
flyBehavior.fly();
}
public void performQuack() {
quackBehavior.quack();
}
public void swim() {
System.out.println("All ducks float, even decoys!");
}
}
//定义飞行的动作
public interface FlyBehavior {
void fly();
}
public class FlyWithWings implements FlyBehavior {
public void fly() {
System.out.println("I’m flying!!");
}
}
public class FlyNoWay implements FlyBehavior {
public void fly() {
System.out.println("I can’t fly");
}
}
// 定义鸭子叫的动作
public interface QuackBehavior {
void quack();
}
public class Quack implements QuackBehavior {
public void quack() {
System.out.println("Quack");
}
}
public class MuteQuack implements QuackBehavior {
public void quack() {
System.out.println("<< Silence >>");
}
}
public class Squeak implements QuackBehavior {
public void quack() {
System.out.println("Squeak");
}
}
// 实现具体的鸭子类
public class MallardDuck extends Duck {
@Override
public void display() {
System.out.println("I'm a MallardDuck");
}
public MallardDuck() {
this.flyBehavior = new FlyWithWings();
this.quackBehavior = new Squeak();
}
}
//测试我们创建的鸭子类
public class test {
public static void main(String[] args) {
Duck duck = new MallardDuck();
duck.performFly();
duck.performQuack();
duck.display();
duck.swim();
}
}
本文由 MengFly 创作,采用
知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:2018-02-23 00:00:00
相关文章推荐: