美文网首页
Head Frist设计模式-策略模式

Head Frist设计模式-策略模式

作者: 好奇害死猫o | 来源:发表于2018-12-23 17:01 被阅读0次

    1.什么是策略模式

    策略模式定义了算法簇,分别封装起来,让他们之间可以相互替换,让算法的变化独立于使用算法的客户。

    2.设计原则

    1.找出应用中的变化之处,把他们独立出来,不要和变化的代码混在一起,系统变的有弹性。
    2.面向接口编程,而不是面向实现类编程。
    3.多用组合,少用继承。


    设计一个动作冒险游戏,存在游戏角色和使用武器行为的类,每个角色一次只能使用一种武器,但是可以在游戏的过程中换武器。
    1.首先设计一个武器使用武器行为的接口,将变化抽象出来。

    package strategy;
    
    /**
     * 使用武器行为的接口
     */
    public interface WeaponBehavior {
        /**
         * 使用武器
         */
        void useWeapon();
    }
    

    2.实现具体的武器类,实现武器行为接口。

    package strategy;
    
    /**
     * 斧头武器的实现
     */
    public class AxeBehavior implements WeaponBehavior {
        @Override
        public void useWeapon() {
            System.out.println("使用斧头劈砍");
        }
    }
    

    package strategy;
    /**
     * 宝剑武器的实现
     */
    public class SwordBehavior implements WeaponBehavior {
        @Override
        public void useWeapon() {
            System.out.println("使用宝剑战斗");
        }
    }
    

    package strategy;
    
    /**
     * 匕首武器的实现
     */
    public class KnifeBehavior implements WeaponBehavior {
        @Override
        public void useWeapon() {
            System.out.println("使用匕首刺杀");
        }
    }
    
    

    3.设计游戏角色的抽象类,持有武器行为的接口

    package strategy;
    
    /**
     * 游戏角色的抽象类
     */
    public abstract class Character {
        /**
         * 将变化的封装起来
         */
        WeaponBehavior weapon;
    
       abstract void fight();
    
        public void setWeapon(WeaponBehavior weapon) {
            this.weapon = weapon;
        }
    }
    

    4.实现具体的游戏角色

    package strategy;
    
    /**
     * 国王角色
     */
    public class King extends Character{
    
        @Override
        void fight() {
            weapon.useWeapon();
        }
    }
    

    package strategy;
    
    /**
     * 女王角色
     */
    public class Queen extends Character{
        @Override
        void fight() {
            weapon.useWeapon();
        }
    }
    

    package strategy;
    
    /**
     * 妖怪角色
     */
    public class Troll extends Character {
        @Override
        void fight() {
            weapon.useWeapon();
        }
    }
    

    package strategy;
    
    public class App {
        public static void main(String[] args) {
            Character character = new King();
            WeaponBehavior weapon = new KnifeBehavior();
            WeaponBehavior sword = new SwordBehavior();
            character.setWeapon(weapon);
            character.fight();
            character.setWeapon(sword);
            character.fight();
        }
    }
    

    运行结果如下,国王角色可以使用匕首进行刺杀,也可以换武器使用宝剑进行战斗。

    使用匕首刺杀
    使用宝剑战斗
    

    相关文章

      网友评论

          本文标题:Head Frist设计模式-策略模式

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