首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让框架创建用户定义子类的实例?

如何让框架创建用户定义子类的实例?
EN

Stack Overflow用户
提问于 2017-10-10 11:34:42
回答 2查看 42关注 0票数 0

我的框架将创建具有接口A的对象。

用户负责定义具体的子类B、C、D.

我在这里告诉框架的正确方法是我的具体类,您可以自己创建这些类(希望创建多少)。

我最初的想法是类似于命令设计模式。区别在于它是一个泛型类(B,C,D.)会返回 A.这合适吗?另一种方法是用工厂方法做类似的事情。

是否有其他模式来解决这个问题?

用户应该能够在不修改框架的情况下创建任意数量的可选子类。框架只应了解接口A。

EN

回答 2

Stack Overflow用户

发布于 2017-10-10 11:45:27

您是说该框架将对其一无所知的类的create实例进行处理吗?

这样做的标准方法是使用工厂或提供者。

代码语言:javascript
复制
interface A { ... }

class B implements A { ... }
class C implements A { ... }

Supplier<B> factoryB = () => {
    return new B();
};
Supplier<C> factoryC = () => {
    return new C();
};

然后,该框架可以使用Supplier<? extends A>实例。

代码语言:javascript
复制
Supplier<? extends A> factory = ...;
A a = factory.get();

这种模式的一个具体实现是ServiceLoader,它允许第三方在运行时提供接口的实现。有一个关于ServiceLoader的Oracle教程

票数 1
EN

Stack Overflow用户

发布于 2017-10-10 16:52:37

问题陈述的本质是处理对象创建机制。您希望让框架创建用户定义类的实例。因此,这个问题陈述属于造物模式。您可以使用工厂模式来设计应用程序。稍后,您可以在更复杂的类或类族增加的情况下迁移到抽象工厂模式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46665727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档