我的框架将创建具有界面A.我怎样才能让我的框架,创建用户定义的子类的实例
用户负责定义具体子类B,C,d的对象...
什么是我在这里讲述框架的正确方式,我可以创建自己的具体类(尽可能多)。
我最初的想法就像命令设计模式。区别在于它将是一个通用类(B,C,D ...),它会返回答:这是否合适?另一种方法是用工厂方法做类似的事情。
是否有解决此问题的替代模式?
用户应该能够创建尽可能多的替代子类,而无需修改框架。该框架应该只知道接口A.
我的框架将创建具有界面A.我怎样才能让我的框架,创建用户定义的子类的实例
用户负责定义具体子类B,C,d的对象...
什么是我在这里讲述框架的正确方式,我可以创建自己的具体类(尽可能多)。
我最初的想法就像命令设计模式。区别在于它将是一个通用类(B,C,D ...),它会返回答:这是否合适?另一种方法是用工厂方法做类似的事情。
是否有解决此问题的替代模式?
用户应该能够创建尽可能多的替代子类,而无需修改框架。该框架应该只知道接口A.
你是说框架将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
你的问题陈述的本质是处理对象创建机制。你想让框架创建用户定义类的实例。所以,这个问题陈述属于创造型模式。您可以使用工厂模式设计您的应用程序。稍后,您可以在更复杂的班级或班级家庭增加的情况下转到抽象工厂模式。