《Head First設計模式》策略模式

上一節介紹了對於鴨子類,如何抽取出變化的行爲,定義爲接口,用具體行爲類來實現不同的行爲。

那麼,如果想要動態的改變鴨子的行爲,應該怎麼做呢?

① 在Duck中,加入兩個新方法
public void setFlyBehavior(FlyBehavior bf)
{
	flyBehavior = fb
}
public void setQuackBehavior(QuackBehavior qb)
{
	quackBehavior = qb
} 




②製造一個新的鴨子類ModelDuck.java
public class ModelDuck extends Duck
{
	public ModelDuck(){
		flyBehavior = new FlyBehavior();
		quackBehavior = new QuackBehavior();
	}
	public void dispaly(){
		System.out.println("I am a model duck")
}
③ 建立一個新的FlyBehavior類 FlyPocketPower.java
public class FlyPocketPower implements FlyBehavior
{
	public void fly(){
		System.out.println("I am flying with a rocket")
}
④改變測試類
public class MiniDuckSimulator
{
	public static void main(String[] args) 
	{
		Duck model = new ModelDuck();
		model.performFly();
		model.setFlyBehavior(new FlyPocketPower());
		model.performFly();
	}
}

至此,本書的第一章結束。

在第一章裏,我們學到了三種設計原則:

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

設計原則(2)P11. 針對接口編程,而不是針對實現編程。

設計原則(3)P23. 多用組合,少用繼承。

策略模式:

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

牢牢記住這個圖:





發佈了98 篇原創文章 · 獲贊 50 · 訪問量 55萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章