理解簡單工廠模式和策略模式的區別

2021-10-07 20:52:37 字數 2426 閱讀 8393

其實工廠模式和設計模式一直給人一種錯覺,總感覺是一樣的,沒有絲毫的區別。可以看下兩種模式的uml圖

從圖上來看,並沒有多大的區別,話不多說,從具體的**入手。

先寫乙個人的介面類,有eat,run,wear 3個方法

public inte***ce people
分別寫兩個實現類,乙個是小明的實現類,乙個是小紅的實現類

public class xiaoming implements people

@override

public void run()

@override

public void wear() }

public class xiaohong implements people

@override

public void run()

@override

public void wear()

}

簡單工廠模式的**

//簡單工廠模式,只負責生產商品,不管具體的商品是什麼

public class peoplefactory else if(name.equals("xiaohong"))

return null;}}

再來看下策略模式的**

//策略模式

public class strategysign

public strategysign(string name)else if(name.equals("xiaohong"))

}//在此組織配置具體的功能執行

public void run()

}

策略模式的兩種構造方法都可以用,我多寫了一種是為了讓大家看到和工廠模式的區別和聯絡

然後我們通過測試類執行兩種模式

可以看到,兩種設計模式的執行結果是一模一樣的,那麼區別到底在哪呢。

從工廠模式的**中可以看到 工廠模式主要是返回的介面實現類的例項化物件,最後返回的結果是介面實現類中的方法,而策略模式是在例項化策略模式的時候已經建立好了,我們可以再策略模式中隨意的拼接重寫方法,而工廠模式是不管方法的拼接這些的,他只關注最後的結果,不注重過程,而策略模式注重的是過程。

用乙個具體的例子可以看下,如果我想小紅先吃飯再跑步再吃飯的話,那麼我需要在測試類中寫3種,而我只需要在策略模式的方法中直接定義即可。

public class strategysign 

public strategysign(string name)else if(name.equals("xiaohong"))

}//組織配置具體的邏輯,比較靈活

有人可能會說如果我在實現類中直接拼接好這些方法不是就好了麼?可是那樣的話我們每變更一次邏輯就要新增乙個方法,一次兩次還好,但是當邏輯多了以後,這些**會變得很冗餘,難以維護。而且從目前情況來看,工廠模式可以做到的事情,策略模式都可以做到。策略模式可以做到的事情,工廠模式也可以做到,只是會變得麻煩。

從上述的描述來看,策略模式就和我們常說的微服務很像,比如我們寫的3個介面,吃飯是乙個微服務,跑步是乙個微服務,穿衣是乙個微服務。策略模式的宗旨就是將各項方法之間連線起來,達到乙個新的方法,微服務的宗旨也是防止服務的多次呼叫,降低**的耦合度,因此這麼看來策略模式和微服務還是比較相像的。

總結下。 工廠模式中只管生產例項,具體怎麼使用工廠例項由呼叫方決定,策略模式是將生成例項的使用策略放在策略類中配置後才提供呼叫方使用。 工廠模式呼叫方可以直接呼叫工廠例項的方法屬性等,策略模式不能直接呼叫例項的方法屬性,需要在策略類中封裝策略後呼叫。工廠模式就是成產對像,至於你要用這個物件做哪些行為他不管。 策略模式是把物件和物件的方法封裝了起來,按照邏輯實現一種行為。所以如果有多種邏輯就會有多個策略類。

工廠和策略的區別其實不是很大。用的場景完全取決於個人。針對你提出的這個問題工廠和策略都可以完成。工廠模式側重的是物件的建立,所有邏輯像你說的一樣需要在測試方法中。而策略模式注重的是演算法的拼接,實現都在strategy類中直接完成了。感覺乙個是只給你乙個例項你自己造,另乙個是把例項當配置注入然後方法屬性封裝好返回乙個策略類,所以差距只是在不同場景下多寫一些**吧.

策略模式和簡單工廠模式

策略模式和簡單工廠模式有什麼不同額?最近在學習設計模式,遇到這兩種模式,有點兒迷糊?簡單工廠模式 public class operation return result private double numbera 0 public double numbera set private doubl...

簡單工廠模式和策略模式

兩種模式如出一轍,基本方式都是通過將相同的行為封裝在乙個抽象父類 或介面 中,然後子類繼承該抽象父類並對該相同的行為進行不同的實現。簡單工廠模式 目的在於根據不同的條件建立不同的子類,工廠類的作用就是建立類。策略模式 比簡單工廠模式多了乙個context類,該類中保持對乙個策略父類的引用。該模式對策...

簡單工廠模式和策略模式

簡單工廠模式是用來當客戶端要判斷採用什麼方法時,把這部分判斷分離出來,放到工廠類中,只要輸入可以鑑別的資訊時就可了,比如計算時的符號,然後在工廠類中判斷用哪種運算類。選擇類 而策略模式中,在工廠類中呼叫的類,他的方法的引數形式可能是不同的,這時候就是不同的策略,那麼就需要建立不同的策略,這時候我們就...