设计模式 | 策略模式

策略模式

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

包含角色

  • 抽象策略(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 ...
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容