我有以下问题想优雅地解决:
public interface IMyclass
{
}
public class A
{
public void Init(IMyclass class){?}
public IMyclass CreateMyClass(){?}
}
在系统启动时,我想通过使用 Init() 定义 IMyClass 的动态类型,在系统运行期间,我想创建我在 init 中定义的类型的新实例。
笔记:
1. IMyclass 必须是接口(interface)
2. IMyclass 的动态类型仅在 init 时已知(我在 :) 之后没有构造函数)
3.我可以在 IMyclass 使用反射或定义方法克隆来完成它,有没有更好的解决方案?
谢谢。
最佳答案
你可以将一个provider传递给class A
public class A
{
IMyClassProvider _provider;
public void Init(IMyClassProvider provider)
{
_provider = provider;
}
public IMyclass CreateMyClass()
{
return _provider.Create();
}
}
或者可能使用构造函数委托(delegate)
public class A
{
Func<IMyclass> _ctor;
public void Init(Func<IMyclass> ctor)
{
_ctor = ctor;
}
public IMyclass CreateMyClass()
{
return _ctor();
}
}
请注意,如果 Init
在 CreateMyClass
之前未被调用,这两个示例都会崩溃,您需要进行一些检查,或者更好的做法是在构造函数中执行初始化。
我是否正确理解了问题?
关于java - 设计模式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6155956/