策略模式(From:Head First設計模式)

策略模式(Strategy Pattern)

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

可怕的問題

對代碼所做的局部修改,影響層面可不是局部(會飛的橡皮鴨)

怎麼辦?

採用良好的OO軟件設計原則。

設計原則(第一個設計原則)

找出應用中可能需要變化之處,把他們獨立出來,不要和那些不需要變化的代碼混在一起。

換句話說,如果每次新的需求一來,都會使某方面的代碼發生變化,那麼可以確定這部分代碼需要抽取出來。——代碼變化引起的不經意後果變少,系統變得更有彈性。

設計原則

針對接口編程,而不是針對實現編程

針對實現編程:

// 聲明變量dDog類型(是Animal的具體實現),會造成我們必須針對具體實現編碼

Dog d = new Dog();

d.bark();

針對接口/超類編程:

// 知道對象時狗,但是利用animal進行多態的調用

Animal animal = new Dog()

Animal.makeSound();

更棒的是,子類實例化的動作不再需要在代碼中硬編碼,例如:new Dog(),而是“在運行時才指定具體實現的對象”。

// 我們不知道實際的子類型是“什麼”….我們只關心它如何正確地進行makeSound()的動作就可以了。

a = getAnimal();

a.makeSound();

設計原則

多用組合,少用繼承。

 

設計模式讓你和其他開發人員之間有共享的詞彙,一旦懂得這些詞彙,和其他開發人員之間溝通就很容易,也會促使哪些不懂的程序員想開始學習設計模式。設計模式也可以把你的思考架構的層次提高到模式層面,而不是僅停留在瑣碎的對象上。

設計模式不會直接進入你的代碼中,而是先進入進的“大腦”中,一旦你現在腦海中裝入許多關於模式的知識,就能夠開始在新設計中採用它們,並當你的舊代碼變得如同攪和一團沒有彈性的時候,可以用他們重構代碼。

知道抽象、繼承、多態這些概念,並不會馬上變成好的面向對象設計者。設計大師關心的是建立彈性的設計,可以維護,可以應付變化。



 

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