最近我想出了動態創建對象的簡單模式的想法。我真的很喜歡它。
我相信那個「輪子」是被髮明和命名的。有人可以指出一些GOF模式嗎?動態對象創建模式 - 我愛
問題:我不想在開始時初始化大量對象。全部都是一個類的實例。 ({「str1」,obj1},{「str2」, OBJ 2},...) 當請求帶有STR1我需要返回OBJ1,...
我能有(僞)
if(str == str1)
return new Obj(obj1_init_params);
else if(str == str2)
return new Obj(obj2_init_params);
...
不過是這樣的:
- 低效 - 在條件滿足的情況下完成。
- 醜陋:)
爲了解決1.你可以使用地圖:
map.put(str1, new Obj(obj1_init_params))
map.put(str2, new Obj(obj2_init_params))
則:
map.get(str1)
這是快速的解決方案,但所有一次不是按需創建。所以....
創建一個包裝接口:
IWrapper {
Obj getObj();
}
然後,我把它放在地圖:
map.put("str1", new IWrapper(){Obj getObj() {return new Object(object1_params)};
現在我在家裏:
- 快速:地圖獲得( 「STR1」)getObj();
- Dynamic - getObj()< - 創建對象被推遲。
這是如此簡單,很好,有人之前命名它。 我是java程序員,所以在這裏工作很好。你能帶來類似的優雅解決方案嗎?
我投票,因爲找工作的優化代碼屬於在代碼審查,關閉這一問題作爲題外話,不堆棧溢出。 – TylerH 2017-03-01 20:13:40
@TylerH是什麼讓你回顧這6年以上。老問題?只是好奇 – OscarRyz 2017-03-01 23:08:04
@OscarRyz http://meta.stackoverflow.com/questions/341843/should-we-burninate-software-engineering過去〜40天裏,在這個問題中使用的標籤上正在進行一次刻錄工作。我們用它來回顧問題,並確定它們在標記本身之前是否在話題上。 – TylerH 2017-03-02 15:51:47