java - 设计模式问题

标签 java oop design-patterns reflection

我有以下问题想优雅地解决:

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();
   }
}

请注意,如果 InitCreateMyClass 之前未被调用,这两个示例都会崩溃,您需要进行一些检查,或者更好的做法是在构造函数中执行初始化。

我是否正确理解了问题?

关于java - 设计模式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6155956/

相关文章:

java - 如何阻止电子邮件通讯弹出窗口拦截点击?

java - 递归的 StackOverflowError

javascript - 使用 "pseudoclassical"模式在 JavaScript 中实现成员变量继承

java - 实体是否应该持有对存储库的引用?

java - 构建器模式(java)。为什么 Builder 类是公共(public)的?

design-patterns - Concern 和 Responsibility 的区别(即 SRP 和 SoC 的区别)?

java - 为使用 hibernate 插入的每一行选择 nextval

java - 无法调用函数的返回值

php - 让所有用户使用 OOP 的正确方法

c# - 推荐工作流应用程序的设计模式