定义:定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
定义算法族(超类或接口及其若干实现类)
public interface FireBehavior {
void fire();
}
public class StrongFire implements FireBehavior {
public void fire() {
System.out.println("Full firepower!!!");
}
}
public class LightFire implements FireBehavior {
public void fire() {
System.out.println("Just so so ,open fire!!!");
}
}
定义客户端(其内部拥有委托类的引用,以及设置委托类的方法)
public abstract class Tank {
//委托类(超类或接口)
FireBehavior fireBehavior;
public Tank(){}
public abstract void display();
// 核心:FireBehavior
public void setFlyBehavior(FireBehavior fireBehavior) {
this.fireBehavior = fireBehavior;
}
// 委托
public void performFire() {
fireBehavior.fire();
}
}
public class LightTank extends Tank {
public LightTank(){
super.fireBehavior = new LightFire();
}
public void display() {
System.out.println("I'm a real Light Tank!");
}
}
测试
public class TankTest {
public static void main(String[] args) {
Tank tank = new LightTank();
// 使用默认的委托类
tank.performFire();
// 动态替换委托类
tank.setFlyBehavior(new StrongFire());
tank.performFire();
}
}
结果
Just so so ,open fire!!!
Full firepower!!!