策略模式(Strategy Pattern)


是什麼?算法

怎麼用?spa

在什麼狀況下用?設計

例子!對象


 

 

策略模式:blog

  對象有某個行爲,但在不一樣的場景下,改行爲有不一樣的實現算法。繼承

  好比:接口

    每一個人都要交「我的所得稅」,但「在美國交的我的所得稅」和「在中國交的我的所得稅」有不一樣的算法。遊戲

  再好比:it

    鴨子(全部的鴨子)有翅膀,但木頭作的鴨子不會飛,活的鴨子會飛,機械鴨子用動力飛。io

 

使用場景:

  一、一個系統有不少類,但這些類的區別僅是它們的行爲不一樣。

  二、一個系統須要在幾個算法中動態的選擇一種。那麼這些算法能夠包裝到一個個具體的算法類中,而這一個個具體的算法類都是一個抽象算法類的子類。

 

原理:

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

  二、封裝每一個算法。

  三、這些算法之間能夠相互替換。

例子:

好比:

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

  Duck 類至關於Context,是鴨子的基類,全部的鴨子都繼承這個類。

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

  FlyBehavior 是飛行的行爲,是個接口,全部的飛行行爲都繼承這個接口。全部的飛行行爲組成了一組算法。

  FlyWithWings、FlyWithRocket 是具體的飛行類,每一個類中實現了一種飛行方式,全部的具體類實現了接口的fly()方法。

  QuackBehavior 是鳴叫的行爲,是個接口,同飛行類同樣。全部的鳴叫方式都實現這個接口。

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

相關文章
相關標籤/搜索