設計模式有不少種,其中功能類似的不少,可是爲何還要分這麼多種名字,查閱資料,我以爲下面的解釋最爲合理:用途不同,名字就有區別,一把斧頭用來砍人就叫兇器,用來砍柴就叫伐木斧,用來劈門就叫消防斧,這些模式的名字都是根據具體使用時的場景,聯繫了現實裏某樣東西或某種習慣而取得,因此很類似的模式行爲有不一樣叫法。
今天咱們就來研究一些工廠模式與策略模式的一些區別:
工廠模式是建立型模式,適應對象的變化。
策略模式是行爲性模式,適應行爲的變化
工廠模式封裝對象,實例化對象後調用的時候要知道具體的方法,策略模式封閉的是行爲,調用的時候必須先制定實例化具體的類,再調用抽象的方法。策略模式和工廠模式一塊兒使用的,用工廠來建立算法類。
策略模式的做用是讓一個對象在許多行爲中選擇一種行爲。
工廠模式是對父類進行重寫,而策略模式是調用不一樣類方法。
這倆個模式原本就是解決相似的問題,能夠說是孿生兄弟,且內部實現都差很少,都是經過子類來覆蓋父類而已,不過簡單工廠是把父類直接擺在客戶端,而策略模式是將父類隱藏在Context裏面,這樣封裝更好。
工廠模式意在抽象類型,它爲了把類似的不一樣實體對象 作一個東西,爲這些對象實現相同的IO特徵
策略模式徹底應用工廠模式進行行爲選擇,但重點指工廠模式裏提供的轉接/擴展特性。怎麼說都覺的不太對勁,但我的理解是,工廠/策略實際是一樣的實現,針對這種實現的不一樣特性作出不一樣的命名,一個強調統一接口,另外一個強調父類的調用子類的特性。
策略模式的問題,簡單工廠模式也能實現,可是須要更多的產品類,而策略模式就是爲解決這個問題而生的;至於真正用那個模式,就須要經驗智慧了。
舉個例子:
<1>產品之於加減乘除,水果之於蘋果梨橘子香蕉,文具之於筆尺刀,這時產品比較具體、有限和沒有多個算法重疊,這時實用簡單工廠模式。
<2>產品之於商場促銷中的返利(可爲300返100、500返200、10000返500等等無數)、折扣(2折、2.5折、6折、9折、9.1折等等無數)、正常購買、消費積分(100元10積分、200元30積分等等無數),這時產品構造又屢次重疊,且有在不一樣時刻應用不一樣的規則時使用策略模式。
簡單工廠模式只是解決了對象的建立問題,工廠須要包括全部的產品對象的建立,若是產品對象形式常常變化,就須要常常改動工廠,以至代碼從新編譯。因此策略模式就誕生了,策略模式---它定義了算法家族,分別封裝起來,而不是像簡單產品模式同樣定義全部的產品類,讓他們之間能夠互相替換,此模式讓算法的變化,不會影響到使用算法的客戶,使客戶擁有相同的訪問過程。
簡單工廠模式的核心是「簡單工廠模式就是用來封裝全部的產品對象的」。
策略模式理解核心是「策略模式就是用來封裝算法的,但在實踐中,咱們發現能夠用它來封裝幾乎任何類型的規則,只要在分析過程當中遇到須要在不一樣時間應用不一樣的業務規則,就能夠考慮使用策略模式處理這種變化的可能性」。
在基本的策略模式中,選擇所用的具體實現的算法的職責由客戶端對象承擔,並轉給策略模式的Context對象。這是策略模式自己純粹的定義,因此,「選擇所用最終怎樣處理」還有不少文章可作。
看了課本以後對於這兩個模式仍是有不少不理解的地方,可是相信隨着對設計模式進一步的學習,可以更好地體會到這其中的奧妙,學習是一個按部就班的過程。算法
https://blog.csdn.net/gaibian0823/article/details/27842443設計模式