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

设计模式 | 策略模式

作者: 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