在Abstract类中实例化

时间:2011-02-11 10:00:41

标签: javascript actionscript-3

我有一个抽象类,它为多个子类提供特定的“基础”行为。我想在这个抽象类中实例化一个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。

1 个答案:

答案 0 :(得分:0)

  

这是一个很好的做法:   a)在抽象类中实例化一个类

它可能取决于设计,但如果实例是所有子类应具有的内容,则在抽象类中创建类的实例没有任何问题。在Java中,如果子类需要访问字段,则使用protected字段完成。

  

b)使用Singleton

执行此操作

如果单例是一个重型对象(例如很多字段,方法等),抽象类的所有子类都需要它,那么最好只在它们之间共享一个实例。看起来ErrorRepository可能非常适合该描述,因为似乎没有多个实例存在的原因。

最后一个想法:如果您没有编写ErrorFactory,请确保errorFactory.createErrorRepository(repositoryType)方法在所有情况下都返回相同的实例。 (即使你写了它,检查它也不是一个坏主意。我是根据经验说的。)