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

2022-09-20 16:39:07 字數 1902 閱讀 1281

其實工廠模式和設計模式一直給人一種錯覺,總感覺是一樣的,沒有絲毫的區別。可以看下兩種模式的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種,而我只需要在策略模式的方法中直接定義即可。

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

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

策略模式和簡單工廠模式

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

簡單工廠模式和策略模式

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

簡單工廠模式和策略模式

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