我的框架将创建具有接口A的对象。
用户负责定义具体的子类B,C,D ......
我在这里告诉框架的正确方法是我自己创建的具体课程(尽可能多)。
我最初的想法就像命令设计模式。不同之处在于它将是一个通用类(B,C,D ......)并且返回 A.这是否合适?另一种方法是使用工厂方法做类似的事情。
是否有其他模式可以解决这个问题?
用户应该能够在不修改框架的情况下创建任意数量的替代子类。框架应该只知道接口A.
答案 0 :(得分:1)
你是说框架会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,它允许第三方在运行时提供接口的实现。有一个Oracle tutorial on ServiceLoader
答案 1 :(得分:0)
问题陈述的本质是处理对象创建机制。您希望让框架创建用户定义类的实例。所以,这个问题陈述属于创造模式。您可以使用Factory Pattern设计应用程序。稍后您可以移动到抽象工厂模式,以防更复杂的类或类族增加。