美文网首页设计模式
StrategyPattern(策略模式)

StrategyPattern(策略模式)

作者: jsjack_wang | 来源:发表于2018-01-24 00:00 被阅读0次
    1.简介
    策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
    
    2.设计原则
    2.1 将类中不变的与变化的区分抽象出来
    2.2 面向接口编程
    2.3 多用组合, 少用继承
    3.小李子
    游戏中有很多角色,每个角色所用武器可能不同,并且是可以实时切换武器的,这时候就要用到策略模式。
    
    4.实现
    4.1 Character.java 人物基类
    public abstract class Character {
        protected WeaponBehavior weaponBehavior;
    
        public void setWeaponBehavior(WeaponBehavior weaponBehavior) {
            this.weaponBehavior = weaponBehavior;
        }
    
        abstract void getCharacterName();
        abstract void fight();
    }
    
    4.2 Troll.java 怪物角色 默认武器就是拳头
    public class Troll extends Character {
    
        public Troll() {
            this.weaponBehavior = new DefaultWeaponBehavior();
        }
    
        @Override
        void getCharacterName() {
            System.out.println("怪人");
        }
    
        @Override
        void fight() {
            this.weaponBehavior.fight();
        }
    }
    
    4.3 DefaultWeaponBehavior.java 默认武器是拳头
    public class DefaultWeaponBehavior implements WeaponBehavior {
        @Override
        public void fight() {
            System.out.println("没有武器, 只是拳头");
        }
    }
    
    4.4 GunBehavior.java 武器枪
    public class GunBehavior implements WeaponBehavior {
        @Override
        public void fight() {
            System.out.println("现在我的武器是GUN");
        }
    }
    
    4.5 所有武器都实现WeaponBehavior接口
    public interface WeaponBehavior {
        void fight();
    }
    
    5.测试
    public class StrategyPatternDemo {
        public static void main(String[] args) {
            Troll troll = new Troll();
            troll.getCharacterName();
            troll.fight();
    
            troll.setWeaponBehavior(new GunBehavior());
            troll.fight();
        }
    }
    result:
        怪人
        没有武器, 只是拳头
        现在我的武器是GUN
    
    6.总结
    看上面实例,武器随时可以切换,开始是拳头后来是GUN。策略模式大概就是这样。
    

    相关文章

      网友评论

        本文标题:StrategyPattern(策略模式)

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