gpt4 book ai didi

design-patterns - 动态对象创建模式 - 我喜欢

转载 作者:行者123 更新时间:2023-12-05 00:40:15 24 4
gpt4 key购买 nike

关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

5年前关闭。




Improve this question




最近我想出了动态创建对象的简单模式的想法。我真的很喜欢它。
我确信那个“轮子”是发明并命名的。有人可以指出一些 GOF 模式吗?

问题:有大量的对象,我不想一开始就全部初始化。所有都是一个类的实例。

我想使用一个对象然后释放内存(或允许垃圾收集),
每个对象都与某个字符串相关,所以我有一个映射 ({"str1", obj1}, {"str2",obj2},...)
当请求带有 str1 时,我需要返回 obj1,....
我可以(伪代码)

if(str == str1)
return new Obj(obj1_init_params);
else if(str == str2)
return new Obj(obj2_init_params);

...

然而这是:
  • 效率低下 - 遍历所有条件。
  • 丑:)

  • 要解决 1. 您可以使用 map :
    map.put(str1, new Obj(obj1_init_params))
    map.put(str2, new Obj(obj2_init_params))

    然后:
    map.get(str1)

    这是一个快速的解决方案,但 ALL IS ONCE 不是按需创建的。所以....

    创建一个包装接口(interface):
     IWrapper {
    Obj getObj();
    }

    然后我把它放在 map 中:
     map.put("str1", new IWrapper(){Obj getObj() {return new Object(object1_params)};

    现在我在家:
  • 快速:map.get("str1").getObj();
  • 动态 - getObj() <- 对象的创建被推迟。

  • 它是如此简单,很好,以前有人命名过它。
    我是java程序员,所以在这里工作得很好。你能提供同样优雅的解决方案吗?

    最佳答案

    编辑 最初,我将“什么”与“如何”混为一谈。

    你取得了什么成就?一个 lazy initialization .
    你是如何做到的?通过Factory pattern (正如许多其他人已经写的那样)。

    更新 您可以使用标准 Callable 接口(interface)而不是 IWrapper :

    map.put(str, new Callable<Obj>() { Obj call() { return new Obj(str); } });

    关于design-patterns - 动态对象创建模式 - 我喜欢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3828607/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com