发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 云架构 框架 开发教程 SOA 大数据 扩展性 并发编程 EDA 分布式 函数编程
1 2 3 下一页 Go 3

使用反射的Factory Pattern与Singleton Pattern的冲突问题

              
2002-10-23 10:10
赞助商链接

具体情况如下:

有个产品系
class X
{
...
}

class A extends X
{
...
}

class B extends X
{
...
}

同类的产品还有C, D, E...等等

该组类的责任是管理web app中的xml文件

为避免管理冲突,对其所有方法synchronized,并使用Singleton Pattern

使得每次都只有一个实例在work

现有工厂方法

class XFactory
{
public X getX(String key)
{
...
}
}

本来我根据传入的参数key生成具体的X系子类
if (key.equals("xxxxx")) then 方法

但是考虑X系的子类很多,于是改用反射,key就是类的全名

X = Class.forName(key).newInstance();

但问题是反射一定要求类的构造器不能private

因此就和X系类的Singleton Pattern冲突了

请教各位DP牛人

如何解决这个问题呢?

2002-10-23 13:01

不一定要用singleton
使用reflect的方法定义static也可以啊。

2002-10-23 15:44

板桥大哥

小弟不是很明白你的话

可否写点关键代码看看

非常感谢

谢谢

2002-10-23 16:44

Reflection API 在运行时无法获取私有成员的值。

2002-10-23 16:44

package test;

import utilities.Recorder;
import java.lang.reflect.*;

public class Reflector
{
public static void main(String[] args)
{
try
{
Class targetClass = Class.forName("test.RF");
Method m = targetClass.getDeclaredMethod("out", null);
m.invoke(null, null);
}
catch (Exception e)
{
Recorder.myLog.debug("Caught an exception : ", e);
}
}
}


class RF
{
static void out()
{
Recorder.myLog.debug("RF.out()");
}

private SubRF()
{
Recorder.myLog.debug("new sub instance");
}
}

class SubRF extends RF
{
static void out()
{
Recorder.myLog.debug("SubRF.out()");
}

private SubRF()
{
Recorder.myLog.debug("new sub instance");
}
}

上面这个程序编译错误
因为构造器的权限为private

3Go 1 2 3 下一页

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com