当前位置:  开发笔记 > 编程语言 > 正文

Java中的多态工厂/ getInstance()

如何解决《Java中的多态工厂/getInstance()》经验,为你挑选了1个好方法。

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

我可以使用工厂方法:

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

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过程,消息驱动的触发器等.

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

假设名为'login.java'的节点知道它对'checkpasswd.sqlpl'有依赖性:

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

问题是checkpasswd.sqlpl对象此时可能已存在,也可能尚未存在.



1> bajafresh4li..:

你看过Guice了吗?不确定它是否能完全解决您的问题,但它充当通用工厂和依赖注入容器,并消除非类型安全的String键.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有