Strategy Pattern將一個領域物件的行為封裝到行為物件中,並力求降低兩者間的相依關係,當行為物件的實作變動時不影響領域物件,也讓行為物件可被動態更換與複用。領域物件不提供行為的實作,行為已委派給行為物件負責。
策略模式定義了演算法家族,個別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變動不會影響到使用演算法的程式。
UML圖請見附件,上方是較正式的表示法,下方是範例。
找出程式中可能需要更動之處,把它們獨立出來,不要和那些不需要更動的程式碼混在一起。
怎麼知道哪邊可能更動:靠經驗、猜測、翻需求文件?
寫程式是針對介面而寫,而不是針對實踐方式而寫。「寫程式是針對介面而寫」真正的意思是「寫程式是針對supertype而寫」。
多用合成(composition),少用繼承。
合成有繼承可複用行為的優點,卻沒有繼承造成物件相依關係太強的缺點,
用一個類別代表一個行為,這個類別也可以有它專屬的屬性與方法。
Strategy常與Factory合用。