我的框架将创建具有接口A的对象。
用户负责定义具体的子类B、C、D.
我在这里告诉框架的正确方法是我的具体类,您可以自己创建这些类(希望创建多少)。
我最初的想法是类似于命令设计模式。区别在于它是一个泛型类(B,C,D.)会返回 A.这合适吗?另一种方法是用工厂方法做类似的事情。
是否有其他模式来解决这个问题?
用户应该能够在不修改框架的情况下创建任意数量的可选子类。框架只应了解接口A。
发布于 2017-10-10 11:45:27
您是说该框架将对其一无所知的类的create实例进行处理吗?
这样做的标准方法是使用工厂或提供者。
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>实例。
Supplier<? extends A> factory = ...;
A a = factory.get();这种模式的一个具体实现是ServiceLoader,它允许第三方在运行时提供接口的实现。有一个关于ServiceLoader的Oracle教程
发布于 2017-10-10 16:52:37
问题陈述的本质是处理对象创建机制。您希望让框架创建用户定义类的实例。因此,这个问题陈述属于造物模式。您可以使用工厂模式来设计应用程序。稍后,您可以在更复杂的类或类族增加的情况下迁移到抽象工厂模式。
https://stackoverflow.com/questions/46665727
复制相似问题