我有一个ObjectFactory和该工厂实现的专门案例。我无法更改界面,即0参数。 在其中一个实现中,我必须读取一个文件并加载一些数据。要传递文件名,我可以使用系统属性,因为我需要共享的是一个字符串。 但在其他实现中,我必须不是从文件开始,而是从内存结构开始。如何将对象(然后我认为对象引用)传递给工厂?其他方法?我无法序列化文件上的对象,然后再次读取它,因为我想要避免的是I / O占用空间。 感谢
好的,更多信息:
这是我必须实现的界面和抽象工厂
public abstract interface A
{
public abstract Set<Foo> getFoo();
public abstract Set<Bar> getBar();
}
//this is otherpackage.AFactory
public abstract class AFactory
{
public static AccessFactory newInstance()
{
return a new built instance of the factory
}
public abstract A newA();
}
这是我的问题实现:
public class AFactory extends otherpackage.AFactory
{
@Override
public Access newA()
{
return new AA();
}
}
public class AA implements A
{
protected AA()
{
this.objectReferenceIWantToSaveHere = I retrieve from the shared memory zone;
use the object
}
}
现在我想做这样的事情:
B b = something I built before
save b in a shared memory zone or something like that
otherpackage.AFactory f = mypackage.AccessFactory.newInstance();
A a = f.newA();
在the f.newA()
内部调用我想访问b对象
答案 0 :(得分:0)
你不能简单地使用构造函数吗?
interface ObjectFactory { Object create(); }
class SpecialFactory implements ObjectFactory {
private final Object data;
public SpecialFactory(Object data) { this.data = data; }
@Override public Object create() { return somethingThatUsesData; }
}
答案 1 :(得分:0)
Ass assylias建议,您可以将引用传递给构造函数。或者,如果您知道在哪里可以找到参考,您可以在使用之前询问它吗?例如。 data = dataBank.giveMeTheData()
答案 2 :(得分:0)
同意它将有助于获得更多关于你正在做的事情的上下文...但是你可以使用一个共享的静态类,其中你的调用代码将信息放入静态类,你的接口实现引用这个相同的静态类获得对象和/或指令?
所以这是一个客户端类。它有入口点...并且想要将一个对象传递给接口实现者,但是它不能直接传递它...所以它设置了它想要传递给MyStaticHelper.SetSharedObject方法的对象。
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String mySharedObject = "Couldbeanyobject, not just string";
// Set your shared object in static class
MyStaticHelper.SetSharedObject(mySharedObject);
InterferfaceImplementer myInterfaceImplementer = new InterferfaceImplementer();
//
myInterfaceImplementer.RunMyMethod();
}
以下是静态助手的代码......
public class MyStaticHelper {
private static Object _insructionsObject;
public static void SetSharedObject(Object anObject)
{
_insructionsObject = anObject;
}
public static Object GetSharedObject()
{
return _insructionsObject;
}
}
最后调用的类使用静态助手来获取相同的对象。
public class InterferfaceImplementer {
// no objects
public void RunMyMethod()
{
System.out.println(MyStaticHelper.GetSharedObject());
}
}
同样,这可以在一个非常简单的场景中工作,并且如果需要同时调用多个实现者,则不会站起来,因为此解决方案只允许一个obj位于静态帮助器类中。