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

2021-06-22 07:30:36 字數 1657 閱讀 8239

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

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

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

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

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

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

工廠模式是對父類進行重寫,而策略模式是呼叫不同類方法。

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

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

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

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

舉個例子

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

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

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

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

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

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

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

設計模式之簡單工廠模式,工廠模式,策略模式

簡單工廠模式 的最大優點是在工廠類中包含了必要的邏輯判斷,根據客戶端的選擇動態例項化相關類,去得到客戶想要的產品。但個人覺得簡單工廠模式的最大優點正是產生它最大缺點之處。因為它的工廠類違反了開放 封閉原則 類,模組,方法等對於擴充套件是開放的,對於更改是封閉的。每當新增乙個功能,我們就需要去修改它的...

策略模式與簡單工廠模式

1,簡單工廠模式 a 有乙個抽象的介面用來表示工廠需要生產的產品共性 然後各個具體的產品類實現該抽象介面。b 工廠只需要持有產品的抽象介面,工廠接收乙個 type 引數來決定生產何種產品。c 對於客戶而言,當他需要某種型別的產品時,只需要獲得工廠物件,然後將產品的 type引數傳遞給工廠,由工廠建立...

策略模式與簡單工廠模式

1,簡單工廠模式 a 有乙個抽象的介面用來表示工廠需要生產的產品共性 然後各個具體的產品類實現該抽象介面。b 工廠只需要持有產品的抽象介面,工廠接收乙個 type 引數來決定生產何種產品。c 對於客戶而言,當他需要某種型別的產品時,只需要獲得工廠物件,然後將產品的 type引數傳遞給工廠,由工廠建立...