策略模式
定义一组算法,将每个算法都封装起来,使得它们之间可以相互替换。策略模式让算法独立于调用它的客户端而独立变化
包含角色
- 抽象策略(Strategy):通常由接口或抽象类实现,定义了多个具体策略的公共接口,具体策略类中各种不同的算法以不同的方式实现这个接口;Context使用这些接口调用不同实现的算法
- 具体策略(ConcreteStrategy):实现Strategy接口或继承于抽象类Strategy,封装了具体的算法和行为
- 环境类(Contex):持有一个公共策略接口的引用,直接给客户端调用
实例
玩枪战类游戏简单实现,可以根据不同战场情况,切换枪支
策略接口
/**
* 策略对象
*/
public interface Weapon {
public void gun();
}
策略实现类
/**
* 策略实现类
*/
public class AWM implements Weapon {
@Override
public void gun() {
System.out.println("AWM ...");
}
}
public class S12K implements Weapon {
@Override
public void gun() {
System.out.println("S12K ...");
}
}
环境类
/**
* 环境
*/
public class Context {
private Weapon weapon;
public Context(Weapon weapon) {
this.weapon = weapon;
}
public Weapon getWeapon() {
return weapon;
}
public void setWeapon(Weapon weapon) {
this.weapon = weapon;
}
public void gun() {
weapon.gun();
}
}
测试类
public class Run {
public static void main(String[] args) {
Context context = new Context(new AWM());
context.gun();
context.setWeapon(new S12K());
context.gun();
}
}
// 输出结果
AWM ...
find enemies 30 meters ahead
S12K ...