1. 程式人生 > >Head First 設計模式第一章 ----策略模式

Head First 設計模式第一章 ----策略模式

設計原則

設計模式告訴我們如何組織類和物件以解決某種問題。

第一個設計原則:找出應用中可能需要變化之處,把它們獨立出來,不要和那些不需要變化的程式碼混在一起。

(把會變化的部分取出並“封裝“起來,好讓其他部分不會受到影響)

第二個設計原則:針對介面程式設計,而不是針對實現程式設計

(”針對介面程式設計“真正的意思是”針對超型別程式設計“,抽象超型別可以是抽象類或介面)

理解例子:

”針對實現程式設計“:                   "針對介面/超型別程式設計":

Dog d = new Dog();                 Animal animal=new Dog();

d.makeSound();                        animal.makeSound();

子類例項化的動作不再需要在程式碼中硬編碼,而是”在執行時才指定具體實現的物件“!

第三個設計原則:多用組合,少用繼承

使用組合建立系統具有很大的彈性,不僅可將演算法族(方法)封裝成類,更可以“在執行時動態地改變行為”

,只要組合的行為物件符合正確的介面標準即可。

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

(1) 應用場景

    a.  多個類只區別在表現行為不同,可以使用Strategy模式,在執行時動態選擇具體要執行的行為。

        b. 需要在不同情況下使用不同的策略(演算法),或者策略還可能在未來用其它方式來實現

        c. 對客戶隱藏具體策略的實現細節,彼此完全獨立。

 (2) 優缺點

     a.  提供了一種替代繼承的方法,而且既保持了繼承的優點(程式碼重用)還比繼承更靈活(演算法獨立,可以任意擴充套件)[優點]

        b. 避免程式中使用多重條件轉移語句,使系統更靈活,並易於擴充套件[優點]

        c. 遵守大部分GRASP原則和常用設計原則,高內聚、低偶合[優點]

        d. 因為每個具體策略類都會產生一個新類,所以會增加系統需要維護的類的數量[缺點]