Design patterns 动态对象创建模式-我喜欢
最近,我提出了一个简单模式的想法,用于动态创建对象。我真的很喜欢它。Design patterns 动态对象创建模式-我喜欢,design-patterns,oop,Design Patterns,Oop,最近,我提出了一个简单模式的想法,用于动态创建对象。我真的很喜欢它。 我确信“轮子”是被发明和命名的。有人能指出一些GOF模式吗 问题:有大量我不想在一开始就初始化的对象。所有这些都是一个类的实例 我想使用一个对象,然后释放内存(或允许垃圾收集), 每个对象都与某个字符串相关,因此我有一个映射({“str1”,obj1},{“str2”,obj2},…) 当请求与str1一起出现时,我需要返回obj1,…。 我可以(伪代码) 然而,这是: 低效-在所有条件下进行检查 丑:) 解决1。您可以使用
我确信“轮子”是被发明和命名的。有人能指出一些GOF模式吗 问题:有大量我不想在一开始就初始化的对象。所有这些都是一个类的实例 我想使用一个对象,然后释放内存(或允许垃圾收集), 每个对象都与某个字符串相关,因此我有一个映射({“str1”,obj1},{“str2”,obj2},…) 当请求与str1一起出现时,我需要返回obj1,…。
我可以(伪代码) 然而,这是:
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)};
现在我在家里:
编辑我最初把“什么”和“如何”混为一谈 你取得了什么成就?A. 你是怎么做到的?通过(正如许多其他人已经写的那样) 更新您可以使用标准界面而不是
IWrapper
:
map.put(str, new Callable<Obj>() { Obj call() { return new Obj(str); } });
map.put(str,newcallable(){Obj call(){returnnewobj(str);});
我记得很久以前写过一篇关于工厂的CodeProject文章。你可以看看它:
此外,不要过度。上有一篇关于FactoryFactorys的优秀文章,让您了解如何在抽象事物方面走得太远。正如其他人之前所说,这被称为“”。你自己弄清楚了,做得很好
如果您想更进一步,请创建一个只包含类名(字符串)的映射。这使您可以从文件中读取名称,最后得到“这导致了”。非常好的解释,通常我知道工厂,还有懒惰的评估(这总是让我害怕,我的第一个想法是单例模式,我开始讨厌它)。但我无法将我的概念融入其中,因为这是两者的组合。简单的“什么”和“如何”视图可以让一切变得清晰!非常感谢@Gadolin我已经添加了一个关于
可调用接口的注释。
map.put(str, new Callable<Obj>() { Obj call() { return new Obj(str); } });