1. 程式人生 > >設計模式---策略模式

設計模式---策略模式

不同的 ext 減少 交互 運行時 系列 使用 增加 策略

策略模式:它定義算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化,不會影響到使用算法的客戶。

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. 每個具體策略類都會產生一個新類,所以會增加系統需要維護的類的數量。

設計模式---策略模式