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,…。
我可以(伪代码)

然而,这是:

  • 低效-在所有条件下进行检查
  • 丑:)
  • 解决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)};
    
    现在我在家里:

  • Fast:map.get(“str1”).getObj()
  • Dynamic-getObj()这听起来有点像工厂模式。

    这是一种工厂模式:

    工厂模式是软件开发中使用的一种创造性设计模式,用于封装对象创建过程中涉及的过程。 对象的创建通常需要复杂的过程,不适合包含在组成对象中

    对象的创建可能会导致代码的大量重复,可能需要合成对象无法访问的信息,可能无法提供足够的抽象级别,或者可能不是合成对象关注的一部分

    创建对象所需的一些过程包括确定要创建的对象、管理对象的生命周期以及管理对象的专门构建和拆卸关注点


    编辑我最初把“什么”和“如何”混为一谈

    你取得了什么成就?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); } });