1. 程式人生 > >策略模式(Strategy Pattern)

策略模式(Strategy Pattern)


是什麼?

怎麼用?

在什麼情況下用?

例子!


 

 

策略模式:

  物件有某個行為,但在不同的場景下,改行為有不同的實現演算法。

  比如:

    每個人都要交「個人所得稅」,但「在美國交的個人所得稅」和「在中國交的個人所得稅」有不同的演算法。

  再比如:

    鴨子(所有的鴨子)有翅膀,但木頭做的鴨子不會飛,活的鴨子會飛,機械鴨子用動力飛。

 

使用場景:

  1、一個系統有很多類,但這些類的區別僅是它們的行為不同。

  2、一個系統需要在幾個演算法中動態的選擇一種。那麼這些演算法可以包裝到一個個具體的演算法類中,而這一個個具體的演算法類都是一個抽象演算法類的子類。

 

原理:

  1、定義一族演算法(業務規則,如:鳥的飛行方式、個人所得稅的繳稅方式)

  2、封裝每個演算法。

  3、這些演算法之間可以相互替換。

例子:

比如:

  設計一個鴨子游戲,遊戲中會出現各種鴨子,鴨子型別有木頭鴨(不會飛,不會叫)、模型鴨(不會叫,動力飛)、綠頭鴨(會飛、會叫)。

  Duck 類相當於Context,是鴨子的基類,所有的鴨子都繼承這個類。

  RubberDuck、ModeDuck 橡皮鴨和模型鴨,是具體的鴨子類。

  FlyBehavior 是飛行的行為,是個介面,所有的飛行行為都繼承這個介面。所有的飛行行為組成了一組演算法。

  FlyWithWings、FlyWithRocket 是具體的飛行類,每個類中實現了一種飛行方式,所有的具體類實現了介面的fly()方法。

  QuackBehavior 是鳴叫的行為,是個介面,同飛行類一樣。所有的鳴叫方式都實現這個介面。

  Quack、Squeak 是具體的鳴叫方式。