1.簡介
策略模式是指對一系列的算法定義,并將每一個(gè)算法封裝起來,而且使它們還可以相互替換。策略模式讓算法獨(dú)立于使用它的客戶而獨(dú)立變化。
2.設(shè)計(jì)原則
2.1 將類中不變的與變化的區(qū)分抽象出來
2.2 面向接口編程
2.3 多用組合, 少用繼承
3.小李子
游戲中有很多角色,每個(gè)角色所用武器可能不同,并且是可以實(shí)時(shí)切換武器的,這時(shí)候就要用到策略模式。
4.實(shí)現(xiàn)
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 怪物角色 默認(rèn)武器就是拳頭
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 默認(rèn)武器是拳頭
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("現(xiàn)在我的武器是GUN");
}
}
4.5 所有武器都實(shí)現(xiàn)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:
怪人
沒有武器, 只是拳頭
現(xiàn)在我的武器是GUN
6.總結(jié)
看上面實(shí)例,武器隨時(shí)可以切換,開始是拳頭后來是GUN。策略模式大概就是這樣。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。