原型工廠模式

2021-09-01 10:25:33 字數 1092 閱讀 2773

顧名思義就是原型模式和工廠模式的結合。在gof的書裡面,抽象工廠那節中對這個有描述,不過內容很少,所以看的時候也沒注意到。

說個實際的問題:系統需要向使用者傳送簡訊,但是根據場景的不同,傳送的簡訊格式也不同,比如重置密碼和傳送臨時驗證碼的簡訊格式就有區別,而之前的開發人員使用了策略模式,每個內容都有乙個類,現在也不方便去改動這些。但是隨需求的增加,傳送的場景在不斷增加,策略+工廠方法模式的情況下需要去增加更多的if-else,導致擴充套件困難,也使得呼叫時候不直觀。

本人自認為自己小腦瓜沒有能力想出好辦法,只好去翻下書籍,無意中看到了抽象工廠內介紹原型工廠的內容,想著可以借鑑。如果依靠一定規範的傳入引數,通過if-else來判斷需要使用的演算法閒**忒長,那麼不為什麼不直接傳入演算法呢。當然傳入演算法的類的話太費資源,但是傳個class或class name不適問題。

引數就是用列舉,這比string引數好,原因是string可以傳入任何字串,而列舉只能是列舉內的指定值,列舉**如下:

public enum messagebuilderenum 

public class<?> getbuidlerclass()

}

再看下功能實現的**

private static concurrenthashmapmessagebuilder = new concurrenthashmap();

public messagesendserviceimpl() catch (instantiationexception e) catch (illegalacces***ception e)

} }@override

public string send(servmessage message, messagebuilderenum builderenum) else

}

工廠方法是在建構函式下,在初始化的時候就為列舉下所有的類初始化,然後儲存在map下,用於當作原型。在需要使用的時候再對原型clone一下就是了。

其實可以在需要使用時候初始化。這裡使用原型是聽說原型建立新物件比較快,當然本人沒仔細測試過,有時間再研究。

原型工廠的工廠可以是抽象工廠模式,也可以是工廠方法模式

工廠模式和原型方法模式

工廠方法模式 工廠模式方法 定義乙個用於建立物件的介面,讓子類決定例項化哪乙個類,工廠方法 使乙個類的例項化延遲到其他子類。工廠方法模式實現時,客戶端需要決定例項化哪乙個工廠來實現運算類,選擇判斷的問題還是存在的,也就是說,工廠方法把簡單的工廠的內部邏輯判斷移到了客戶端 來實現進行,你想要加功能,本...

PHP設計模式之工廠模式和原型模式

這兩個模式都是針對物件建立和復用的,只是一種設計風格,在建立物件的,隨時都可以改進現有的 畢竟老 很多地方不容易更改了,所以這兩個模式一般適合新加進去,比較容易建立物件或者使用新物件 再者就是。算了 我想說的就是js,把原型做的爐火純青,我一直很痴迷,很多原型都深深的嵌入到語言的核心。推薦那本書 你...

模式學習小結 工廠模式 建構函式 原型模式

一直對工廠模式 建構函式及原型模式的定義有些模糊,今天抽了些時間學了下工廠模式 建構函式及原型模式的區別及用途,小結一番。一 工廠模式 工廠模式 function createperson name,age var person1 createperson one 20 var person2 cr...