声明: 本文所有代码均来自慕课网
模式简述
分别封装行为接口,实现算法族,基类里面放行为对象接口,在子类中设定具体行为对象。原则是分离变化部分封装接口,基于接口编程。此模式让行为算法的变化独立于算法的使用者。
策略模式的实现步骤
1 分离变化得出策略接口Strategy
2 为Strategy提供实现类
3 使客户程序中有一个Strategy
4 在客户程序中正确组装实现类
代码讲解
/*
* 超类,所有的鸭子都要继承此类
* 抽象了鸭子的行为:显示和鸣叫
*/
public abstract class Duck {
/*
* 鸭子发出叫声
* 通用行为,由超类实现
*/
public void quack(){
System.out.println("嘎嘎嘎");
}
/*
* 显示鸭子的外观
* 鸭子的外观各不相同,声明为abstract, 由子类实现
*/
public abstract void display();
private FlyingStragety flyingStragety;
public void setFlyingStragety(FlyingStragety flyingStragety) {
this.flyingStragety = flyingStragety;
}
public void fly(){
flyingStragety.performFly();
}
//抽象出的Stategy接口
public interface FlyingStragety {
void performFly();
}
//Strategy的实现类(此为其中一种)
public class FlyNoWay implements FlyingStragety {
public void performFly() {
System.out.println("我不会飞行!");
}
}
//(子类)在客户程序中正确组装实现类
public class RubberDuck extends Duck {
public RubberDuck() {
super();
super.setFlyingStragety(new FlyNoWay());
}
@Override
public void display() {
System.out.println("我全身发黄,嘴巴很红");
}
public void quack(){
System.out.println("嘎~嘎~嘎~");
}
}