设计模式

StrategyPattern(策略模式)

2018-01-24  本文已影响0人  jsjack_wang
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。策略模式大概就是这样。
上一篇下一篇

猜你喜欢

热点阅读