2017-10-10 26 views
0

我的框架将创建具有界面A.我怎样才能让我的框架,创建用户定义的子类的实例

用户负责定义具体子类B,C,d的对象...

什么是我在这里讲述框架的正确方式,我可以创建自己的具体类(尽可能多)。

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

是否有解决此问题的替代模式?

用户应该能够创建尽可能多的替代子类,而无需修改框架。该框架应该只知道接口A.

回答

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

0

你的问题陈述的本质是处理对象创建机制。你想让框架创建用户定义类的实例。所以,这个问题陈述属于创造型模式。您可以使用工厂模式设计您的应用程序。稍后,您可以在更复杂的班级或班级家庭增加的情况下转到抽象工厂模式。

相关问题