我有一个抽象类,它为多个子类提供特定的“基础”行为。我想在这个抽象类中实例化一个Singleton。是不错的做法:
a)在抽象类中实例化一个类 b)用Singleton做这个(我知道这些可能不赞成)
为了清楚起见,我将举例说明,实例化Singleton的方法是:
public function createErrorRepository(repositoryType:String):void {
this._errorFactory = ErrorFactory.getInstance();
this._errorRep = this._errorFactory.createErrorRepository(repositoryType);
}
我有抽象的方法:
public function getTitle():String {
throw new IllegalOperationError("Error - getTitle functionality not supported");
}
也许我已经过度思考了,但是如果能得到一些确认这是一种很好的做法会很好吗?
由于
克里斯
N.B我正在使用as3,但由于相似性,也标记了Java。
答案 0 :(得分:0)
这是一个很好的做法: a)在抽象类中实例化一个类
它可能取决于设计,但如果实例是所有子类应具有的内容,则在抽象类中创建类的实例没有任何问题。在Java中,如果子类需要访问字段,则使用protected
字段完成。
b)使用Singleton
执行此操作
如果单例是一个重型对象(例如很多字段,方法等),抽象类的所有子类都需要它,那么最好只在它们之间共享一个实例。看起来ErrorRepository可能非常适合该描述,因为似乎没有多个实例存在的原因。
最后一个想法:如果您没有编写ErrorFactory,请确保errorFactory.createErrorRepository(repositoryType)
方法在所有情况下都返回相同的实例。 (即使你写了它,检查它也不是一个坏主意。我是根据经验说的。)