1.什么是策略模式
策略模式定義了算法簇,分別封裝起來,讓他們之間可以相互替換,讓算法的變化獨立于使用算法的客戶。
2.設(shè)計原則
1.找出應(yīng)用中的變化之處,把他們獨立出來,不要和變化的代碼混在一起,系統(tǒng)變的有彈性。
2.面向接口編程,而不是面向?qū)崿F(xiàn)類編程。
3.多用組合,少用繼承。
設(shè)計一個動作冒險游戲,存在游戲角色和使用武器行為的類,每個角色一次只能使用一種武器,但是可以在游戲的過程中換武器。
1.首先設(shè)計一個武器使用武器行為的接口,將變化抽象出來。
package strategy;
/**
* 使用武器行為的接口
*/
public interface WeaponBehavior {
/**
* 使用武器
*/
void useWeapon();
}
2.實現(xiàn)具體的武器類,實現(xiàn)武器行為接口。
package strategy;
/**
* 斧頭武器的實現(xiàn)
*/
public class AxeBehavior implements WeaponBehavior {
@Override
public void useWeapon() {
System.out.println("使用斧頭劈砍");
}
}
package strategy;
/**
* 寶劍武器的實現(xiàn)
*/
public class SwordBehavior implements WeaponBehavior {
@Override
public void useWeapon() {
System.out.println("使用寶劍戰(zhàn)斗");
}
}
package strategy;
/**
* 匕首武器的實現(xiàn)
*/
public class KnifeBehavior implements WeaponBehavior {
@Override
public void useWeapon() {
System.out.println("使用匕首刺殺");
}
}
3.設(shè)計游戲角色的抽象類,持有武器行為的接口
package strategy;
/**
* 游戲角色的抽象類
*/
public abstract class Character {
/**
* 將變化的封裝起來
*/
WeaponBehavior weapon;
abstract void fight();
public void setWeapon(WeaponBehavior weapon) {
this.weapon = weapon;
}
}
4.實現(xiàn)具體的游戲角色
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();
}
}
運行結(jié)果如下,國王角色可以使用匕首進行刺殺,也可以換武器使用寶劍進行戰(zhàn)斗。
使用匕首刺殺
使用寶劍戰(zhàn)斗