AS3多态性:从该类中更改类

时间:2012-08-17 17:48:39

标签: actionscript-3 polymorphism

这是我的问题的一个非常简化的版本,但应该足以解决我的问题。

我们假设我有DressingRoom,Person,Hat,Badge和Foreman等课程,该应用程序允许您在更衣室里给一个人不同类型的帽子,如果它是一个领班,他可以得到一个徽章也是。 我想要的是,如果你给他一顶白帽子并让他只是一个普通人,如果不是,那么他就会成为一名工头。

是否可以在Person中将某个类设置为其自身的子类,而不是必须在Dressing Room类中进行(这很容易)。

public class DressingRoom{
  public var length:int;
  public var occupant:Person;
}

public class Person{
  public var name:String;
  public var hat:Hat;

  public function hatChanged():void{
    if (hat.color==0xFFFFFF){
      this =  new Foreman(name,hat);
    }
  }
}

public class Hat{
  public var size:int;
  public var color:uint;
}

public class Foreman() extends Person{
  public var badge:Badge;

  public function hatChanged():void{
    if (hat.color!=0xFFFFFF){
      this =  new Person(name,hat);
    }
  }
} 

3 个答案:

答案 0 :(得分:1)

你问题的直接答案是否定的。你在更衣室的概念中走在正确的轨道上虽然你占据了占用者:包装类中的人,并在需要时检查它是否属于Foreman类型。

答案 1 :(得分:1)

似乎是装饰设计模式的一个很好的候选者。在as3dp.com

上有相当多的内容

答案 2 :(得分:1)

奇怪的问题:)您可以使用合成而不是继承。它看起来像这样:

public interface IHat{
  function get status():HatStatus
}

public class ForemanHat implements IHat{
  private const status:ForemanStatus = new ForemanStatus();
  public function get status():HatStatus {return status;}
}

public class Person{
  private var status:HatStatus;

  public function setHat(hat:IHat):void{
    status = hat.status;
  }

  public function get status():HatStatus{ return status}
}

你可以简单地添加更多帽子。