Head Frist设计模式-策略模式

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设计模式-策略模式)