Han*_*etz 11 java inheritance singleton
我有一些用作单身人士的课程.它们共享一些基本功能,并从库中扩展相同的祖先,而库通常不用作单例.
如果我将公共功能放在从公共祖先继承的基类中,我会得到一个实例化没有意义的类,所以我把它变成了抽象的.此外,因为这些类都被用作单例,所以它们都应该有一个init()和一个getInstance()方法,它们都是静态的.所有的建设者当然都是非公开的.
现在,因为static
是抽象方法的非法修饰符,以下方法不起作用,尽管这正是我想要的:
class Base extends LibraryClass {
protected Base() {
// ... constructor
}
// ... common methods
// ILLEGAL!
public static abstract void init();
public static abstract <T extends Base>T getInstance();
}
class A extends Base {
private static A _INSTANCE;
private A() {
super();
}
public static void init() {
_INSTANCE = new A();
}
public static A getInstance() {
return _INSTANCE;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以省略基类中的非法行并完成它.但是,我如何表达Base的每个孩子都必须拥有这些方法?
Aar*_*lla 14
这在Java中是不可能的.static
方法的存在不能强制执行; 既不是abstract
也不是使用interface
.
我的解决方案是以某种方式使用IoC:我为单身人士创建了一个工厂类.它会将单身人士保存在地图中.关键是班级.这样,我可以说:
A singleton = Factory.create (A.class);
Run Code Online (Sandbox Code Playgroud)
这个设计的主要优点是:我可以创建一个Factory.replace()
测试用例可以覆盖单例的方法.
归档时间: |
|
查看次数: |
8370 次 |
最近记录: |