Java中的策略模式(strategy)完全解析

来源:互联网 发布:c 高级编程视频教程 编辑:程序博客网 时间:2024/06/05 19:25

先给出策略模式的UML图,然后再根据之前很火的一款CS游戏来实例讲解策略模式。
这里写图片描述
怎样看上面的图呢,现在我们通过CS游戏来分析一下,在玩CS游戏时玩家在不同的场合可能会不断的进行武器的切换,一般有三种武器,刀,手雷,枪。这些武器是如何进行切换的呢,这里就用到了策略模式。
这里写图片描述
WeaponContext:

public class WeaponContext {    WeaponStrategy weapon;    public WeaponContext(WeaponStrategy weapon) {        this.weapon = weapon;    }    public void useWeapon() {        weapon.weaponAction();    }}

WeaponStrategy:

public interface WeaponStrategy {    public void weaponAction();}

Grenade:

public class Grenade implements WeaponStrategy{    @Override    public void weaponAction() {        // TODO Auto-generated method stub        System.out.println("Grenade boom");    }}

Gun:

public class Gun implements WeaponStrategy{    @Override    public void weaponAction() {        // TODO Auto-generated method stub        System.out.println("gun shot");    }}

Knife:

public class Knife implements WeaponStrategy{    @Override    public void weaponAction() {        // TODO Auto-generated method stub        System.out.println("knife kill");    }}

PeopleCs:

public class PeopleCs {    private static int i=0;    private static WeaponContext weapon;    public static void main(String[] args) {        // TODO Auto-generated method stub        while(i<20)        {            switch (i%3) {            case 0:weapon=new WeaponContext(new Knife());                weapon.useWeapon();                break;            case 1:weapon=new WeaponContext(new Grenade());            weapon.useWeapon();            break;            case 2:weapon=new WeaponContext(new Gun());            weapon.useWeapon();            break;            }            i++;        }    }}

这样cs玩家就可以随心所欲的在三种不同的武器之间切换了,如果用户又增加了不同的武器,也只需要其实现接口WeaponStrategy,然后使用WeaponContext就可以了。
源代码下载地址(eclipse上可直接运行))

0 0
原创粉丝点击