設計模式---策略模式
策略模式:它定義算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化,不會影響到使用算法的客戶。
Context(應用場景):
1. 需要使用ConcreteStrategy提供的算法。
2. 內部維護一個strategy的實例。
3. 負責動態設置運行時strategy具體的實現算法
4. 負責跟Strategy之間的交互和數據傳遞。
Strategy(抽象策略類):
定義一個公共接口,各種不同的算法以不同的方式實現這個接口,context使用這個接口調用不同的算法,一般使用接口或者抽象類實現。
ConcreteStrategy(具體策略類):
實現了Strategy定義的接口,提供具體的算法實現。
應用場景:
1、 多個類只區別在表現行為不同,可以使用Strategy模式,在運行時動態選擇具體要執行的行為。(例如商場促銷)
2、 需要在不同情況下使用不同的策略(算法),或者策略還可能在未來用其它方式來實現。(具體優惠活動)
3、 對客戶隱藏具體策略(算法)的實現細節,彼此完全獨立。
優點:
1. 策略模式是一種定義一系列算法的方法,從概念上來看,所有這些算法完成的都是相同的工作,只是實現不同,它可以以相同的方式調用所有的算法,減少了各種算法類與 使用算法類之間的耦合。
2. 策略模式的Strategy類層次為Context定義了一些列的可供重用的算法或行為。繼承有助於析取出這些算法中的公共功能。
3. 簡化了單元測試,因為每個算法都有自己的類,可以通過自己的接口單獨測試。
4. 當不同的行為堆砌在一個類中時,就很難避免使用條件語句來選擇合適的行為。將這些行為封裝在一個個獨立的Strategy類中,可以在使用這些行為的類中消除條件語句。
缺點:
1. 每個具體策略類都會產生一個新類,所以會增加系統需要維護的類的數量。
設計模式---策略模式