3

我有一个关于 OOP(在 AS3 中)的相当简单的理论问题,我不知道如何用谷歌搜索:

我需要一个抽象类之类的东西,它需要依赖类实现一些接口,如下所示:

Interface ISomething
{
   public function somethingize(otherThing:type):void;
}

abstract public class AbstractSomething implements ISomething
{
   public function AbstractSomething()
   {
        // ...
   }

   public function doSomething():void
   {
       //code here
       // ...
       this.somethingize();
       // ...
   }
}

实现这样的事情的唯一方法是删除“抽象”关键字,并将 somethingize 移动到 SomethingWrapper (通过抛出“未实现的异常”的实现),还是有更好的建模方法?

4

2 回答 2

3

ActionScript 不支持抽象类(很遗憾)。

我认为有一些技术可以尝试和模仿抽象,但我的方法也只是在我的抽象类中抛出错误以阻止它们被直接使用,例如:

public class AbstractSomething implements ISomething
{
    public function AbstractSomething()
    {
        throw new Error("this is an abstract class. override constructor in subclass");
    }

    public function doSomething():void
    {
        throw new Error("this is an abstract class. override doSomething in subclass");
    }
}
于 2013-02-28T02:44:56.927 回答
0

如果没有关于具体实现的更多信息,在这种情况下,我更喜欢组合而不是继承,特别是依赖注入。

public interface ISomething {
    function somethingize(thing:*):void;
}

public class SomeWorker {

    private var _something:ISomething;

    public function SomeWorker(something:ISomething) {
       this._something = something;
    }

    public function doSomething():void {

        // work
        this._something.somethingize(obj);
        // more work

    }
}

SomeWorker 的继承类可以为他们需要做的工作注入正确的 ISomething 实现,或者可以在其他地方解决依赖关系。

于 2013-02-28T02:54:33.590 回答