策略模式與狀態工廠,簡單工廠的恩怨

2021-07-26 22:53:58 字數 983 閱讀 8389

為什麼題目叫做他們的恩怨呢?因為策略模式與狀態模式很相似,他們互相指責對他是冒牌貨,簡單工廠和策略模式沒有上乙個模式仿造的厲害,讓我一起看看誰才是真的!他們之間的區別是什麼?

(如有異同請指出)

首先給大家看一下他們的相似之處,就如兩個瓷器一樣,從表面上看我像都是一樣的,我們首先看一下他們的uml圖

策略模式uml

狀態工廠uml

大家光從uml圖中看是不是感覺這兩個圖基本上沒有太大的差異,在我們學習設計模式的時候uml對於我們來說也是非常重要的,我們往往通過uml圖來知道這個程式的整體架構,到底誰是誰?哈哈

我們把出行方式分成很多種,可以通過介面找到自己相應的類,當我們修改乙個演算法類的時候都會影響到其他類

缺點:所以對於策略的選擇還是要客戶端來做。所以在客戶端就會用新增判斷語句

通過uml圖可以發現策略模式跟狀態模式很相似

狀態模式:例如我們人的行為可以有不同的狀態。當行為改變的時候,狀態也會隨之改變。

缺點:狀態模式會很多

相似之處

兩種模式都遵循開閉的設計原則,都是行為型,行為改變會影響,狀體模式的行為改變會影響狀態,策略模式的策略改變行為

區別 策略模式的客戶端有條件判斷,而狀態模式的客戶端沒有。使用狀態模式無需考慮具體的狀態,因為行為變化狀態就會自動的變化

策略模式在物件初始化的時候就已經更改執行。而狀態模式是根據物件例項週期時間動態的改變

簡單工廠的區別

工廠模式是建立型的,他主要注重於物件的建立,提供建立物件的介面,物件的建立於客戶端無關,但策略模式是行為性的,它關注的是行為和演算法,並且他與客戶端有關

總結:

通過找聯絡與區別我們可以更好的去記住不同的模式

簡單工廠與策略模式

專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。它又稱為靜態工廠方法模式,屬於類的建立型模式。簡單工廠模式的實質是由乙個工廠類根據傳入的引數,動態決定應該建立哪乙個產品類 這些產品類繼承自乙個父類或介面 的例項。該模式中包含的角色及其職責 1 工廠 creator 角色 簡單...

策略模式與簡單工廠模式

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

策略模式與簡單工廠模式

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