您的位置:首页 > 其它

设计模式--策略模式

2016-07-09 15:10 393 查看
示例:

Character是角色类,是抽象类,由具体的角色来继承,Weapon是武器接口,有具体的武器来实现。任何角色想换武器可以有setWeapon方法来实现,在角色fight过程中使用武器的useWeapon方法,进行攻击。

UML:



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

将WeaponBehavior封装成接口,接口的实现可以相互替换。

原则:

封装变化

  把系统中会变化的部分抽取出来进行封装。此处将WeaponBehavior封装起来。

多用组合,少用继承

  将角色类和武器类进行组合,少用继承。

针对接口编程,不针对实现编程

  实现武器的接口,并不是通过角色类自己来实现。

源码:

Character.java

/**
* Created by Edward on 2016/7/9.
*/
public abstract class Character {
protected WeaponBehavior weapon;
public abstract void fight();
public void setWeapon(WeaponBehavior weapon)
{
this.weapon = weapon;
}
}


WeaponBehavior.java

/**
* Created by Edward on 2016/7/9.
*/
public interface WeaponBehavior {
void useWeapon();
}


King.java

/**
* Created by Edward on 2016/7/9.
*/
public class King extends Character {
@Override
public void fight() {
this.weapon.useWeapon();
}
}


SwordBehavior.java

/**
* Created by Edward on 2016/7/9.
*/
public class SwordBehavior implements WeaponBehavior {
@Override
public void useWeapon() {
System.out.println("use Sword!");
}
}


测试类:

/**
* Created by Edward on 2016/7/9.
*/
public class Test {

public static void main(String[] args) {
Character king = new King();
WeaponBehavior sword = new SwordBehavior();
king.setWeapon(sword);
king.fight();
}
}


参考自《设计模式》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: