最近我想出了动态创建对象的简单模式的想法。我真的很喜欢它。
我相信那个“轮子”是被发明和命名的。有人可以指出一些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