我正在编写一个应该包装一些例程的小框架。我以Spring
为基础,使用@Autowired
。在我的框架中,我连接了interface
和abstract
类。因此,当使用框架作为依赖时,实现项目可以提供实际的实现。
但是:我如何强迫任何使用我的框架的人必须实现一个特定的界面(当然除了文档)?
有办法吗?
框架类的示例:
interface IFoo {
void run();
}
abstract class Bar {
@Autowired private Ifoo ifoo;
void routine() {
ifoo.run();
}
}
实施项目:我可以强制用户:
class CustomBar extends Bar
或:CustomFoo implements IFoo
?
我的目标是编写某种模板引擎框架。那么这个依赖的用户只需要通过实现某些接口或抽象类来提供逻辑,而不必关心我创建的模板框架中包含的执行逻辑。
答案 0 :(得分:3)
我可以强制用户:
class CustomBar extends Bar
或:
CustomFoo implements IFoo ?
他们无法避免。让我们依次看看它们:
为了向您的框架提供Bar
的实例,他们必须创建实例。但Bar
无法实例化,它是一个抽象类(您将其声明为abstract class Bar
)。要创建一个实例,有对其进行子类化,然后创建子类的实例。
同样,IFoo
是一个接口。您无法实例化接口。要创建使用该接口的实例,您有来定义实现该接口的类,然后创建该类的实例。
当然你也想要记录事情,但是通过创建类abstract
并使用接口,如果他们想要创建实例以传递到框架中,那么就强迫它们进行子类化/实现。
答案 1 :(得分:1)
我认为你必须记录你的框架: 要做一个特定的想法,你必须创建一个实现特定接口的类。 (如在春季文档中)