gpt4 book ai didi

java - Java 中的多态工厂/getInstance()

转载 作者:搜寻专家 更新时间:2023-10-30 21:27:13 24 4
gpt4 key购买 nike

我的目标是创建一组对象,每个对象都有一个唯一的标识符。如果具有该标识符的对象已经存在,我想使用现有对象。否则我想创建一个新的。我尽量不使用 Singleton 这个词,因为我知道它在这里是一个肮脏的词......

我可以使用工厂方法:

    // A map of existing nodes, for getInstance.
private static Map<String, MyClass> directory = new HashMap<String, MyClass>();

public static MyClass getInstance(String name) {
MyClass node = directory.get(name);
if(node == null) {
node == new MyClass(name);
}
return node;
}

或者同样,我可以有一个单独的 MyClassFactory 方法。

但我本来打算子类化 MyClass:

public class MySubClass extends MyClass;

如果我不再做,调用 MySubClass.getInstance():

MyClass subclassObj = MySubClass.getInstance("new name");

...那么 subclassObj 将是一个普通的 MyClass,而不是 MySubClass。

然而,在每个子类中覆盖 getInstance() 似乎很老套。

我是否缺少一个巧妙的解决方案?


这是问题的一般化版本。更具体,因为回答者要求他们。

该程序用于生成表示软件片段的节点之间依赖关系的有向图。子类包括 Java 程序、Web 服务、存储 SQL 过程、消息驱动触发器等。

因此每个类在该网络中“是一个”元素,并且具有导航和修改与其他节点的依赖关系的方法。子类之间的区别在于 populate() 方法的实现,该方法用于从适当的源设置对象。

假设名为“login.java”的节点知道它依赖于“checkpasswd.sqlpl”:

this.addDependency( NodeFactory.getInstance("checkpasswd.sqlpl"));

问题是 checkpasswd.sqlpl 对象此时可能已经存在,也可能不存在。

最佳答案

您是否调查过 Guice?不确定它是否能完全解决您的问题,但它充当通用工厂和依赖项注入(inject)容器,并消除了非类型安全的字符串键。

关于java - Java 中的多态工厂/getInstance(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/317869/

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