策略模式(Strategy Pattern)

設計原理1:找出應用中可能需要變化之處,把它們獨立出來,不要和那些不需要變化的代碼混在一起

設計原理2:針對接口編程,而不是針對實現編程

設計原理3:多用組合,少用繼承


選自《Head First 設計模式》:

策略模式(Strategy Pattern):定義了算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨立於使用算法的客戶


案例: 如同《Head First 設計模式》的鴨子案例,如下爲遊戲中角色和武器之間的案例:



武器的使用可以視爲算法,並且會因爲角色的不同而經常發生變化,因此針對WeaponBehavior接口編程。案例代碼:

public abstract class Character {

	private WeaponBehavior weapon;
	
	public void fight() {
		weapon.useWeapon();
	}
	
	public void setWeapon(WeaponBehavior weapon) {
		this.weapon = weapon;
	}
}

public interface WeaponBehavior {

	public void useWeapon();
}

public class SwordBehavior implements WeaponBehavior {

	@Override
	public void useWeapon() {
		System.out.println("I am using sword");
	}

}

public class PatternDemo {

	public static void main(String[] args) {
		King king = new King();
		
		king.setWeapon(new KnifeBehavior());
		king.fight();
		
		king.setWeapon(new AxeBehavior());
		king.fight();
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章