1. 程式人生 > >工廠模式與策略模式之區別

工廠模式與策略模式之區別

       設計模式有很多種,其中功能相似的很多,但是為什麼還要分這麼多種名字,查閱資料,我覺得下面的解釋最為合理:用途不一樣,名字就有區別,一把斧頭用來砍人就叫凶器,用來砍柴就叫伐木斧,用來劈門就叫消防斧,這些模式的名字都是根據具體使用時的場景,聯絡了現實裡某樣東西或某種習慣而取得,所以很相似的模式行為有不同叫法。

       今天我們就來研究一些工廠模式與策略模式的一些區別:

       工廠模式是建立型模式,適應物件的變化。

       策略模式是行為性模式,適應行為的變化

       工廠模式封裝物件,例項化物件後呼叫的時候要知道具體的方法,策略模式封閉的是行為,呼叫的時候必須先制定例項化具體的類,再呼叫抽象的方法。策略模式和工廠模式一起使用的,用工廠來建立演算法類。

策略模式的作用是讓一個物件在許多行為中選擇一種行為。

      工廠模式是對父類進行重寫,而策略模式是呼叫不同類方法。
      這倆個模式本來就是解決類似的問題,可以說是孿生兄弟,且內部實現都差不多,都是通過子類來覆蓋父類而已,不過簡單工廠是把父類直接擺在客戶端,而策略模式是將父類隱藏在Context裡面,這樣封裝更好。

      工廠模式意在抽象型別,它為了把相似的不同實體物件 做一個東西,為這些物件實現相同的IO特徵

      策略模式完全應用工廠模式進行行為選擇,但重點指工廠模式裡提供的轉接/擴充套件特性。怎麼說都覺的不太對勁,但個人理解是,工廠/策略實際是同樣的實現,針對這種實現的不同特性做出不同的命名,一個強調統一介面,另一個強調父類的呼叫子類的特性。

策略模式的問題,簡單工廠模式也能實現,但是需要更多的產品類,而策略模式就是為解決這個問題而生的;至於真正用那個模式,就需要經驗智慧了。

      舉個例子:<1>產品之於加減乘除,水果之於蘋果梨橘子香蕉,文具之於筆尺刀,這時產品比較具體、有限和沒有多個演算法重疊,這時實用簡單工廠模式。

<2>產品之於商場促銷中的返利(可為300返100、500返200、10000返500等等無數)、折扣(2折、2.5折、6折、9折、9.1折等等無數)、正常購買、消費積分(100元10積分、200元30積分等等無數),這時產品構造又多次重疊,且有在不同時刻應用不同的規則時使用策略模式。

簡單工廠模式只是解決了物件的建立問題,工廠需要包括所有的產品物件的建立,如果產品物件形式經常變化,就需要經常改動工廠,以致程式碼重新編譯。所以策略模式就誕生了,策略模式---它定義了演算法家族,分別封裝起來,而不是像簡單產品模式一樣定義所有的產品類,讓他們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶,使客戶擁有相同的訪問過程。

簡單工廠模式的核心是“簡單工廠模式就是用來封裝所有的產品物件的”。


策略模式理解核心是“策略模式就是用來封裝演算法的,但在實踐中,我們發現可以用它來封裝幾乎任何型別的規則,只要在分析過程中遇到需要在不同時間應用不同的業務規則,就可以考慮使用策略模式處理這種變化的可能性”。


在基本的策略模式中,選擇所用的具體實現的演算法的職責由客戶端物件承擔,並轉給策略模式的Context物件。這是策略模式本身純粹的定義,所以,“選擇所用最終怎樣處理”還有很多文章可做。

         看了課本之後對於這兩個模式還是有很多不理解的地方,但是相信隨著對設計模式進一步的學習,能夠更好地體會到這其中的奧妙,學習是一個循序漸進的過程。