美文网首页
设计模式 | 策略模式

设计模式 | 策略模式

作者: icebreakeros | 来源:发表于2019-08-10 11:56 被阅读0次

策略模式

定义一组算法,将每个算法都封装起来,使得它们之间可以相互替换。策略模式让算法独立于调用它的客户端而独立变化

包含角色

  • 抽象策略(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 ...

相关文章

网友评论

      本文标题:设计模式 | 策略模式

      本文链接:https://www.haomeiwen.com/subject/dltrjctx.html