1

これは私の問題の非常に単純化されたバージョンですが、問題を解決するには十分なはずです。

DressingRoom、Person、Hat、Badge、および Foreman というクラスがあり、このアプリを使用すると、ドレッシング ルームにいる人にさまざまな種類の帽子を与えることができます。また、その人が職長であれば、バッジも取得できます。 . 私が望むのは、ユーザーが白い帽子をかぶればフォアマンになり、そうでない場合はただの一般人になってもらうことです。

特定のクラスを、Dressing Room クラスで行うのではなく、Person 内でそれ自体のサブクラスに設定することは可能ですか (これは簡単に実行できます)。

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);
    }
  }
} 
4

3 に答える 3

1

あなたの質問に対する直接的な答えはNOです。ラッパー クラスで occupant:Person を保持し、必要に応じてタイプが Foreman であるかどうかを確認します。

于 2012-08-17T18:20:25.640 に答える
1

デコレータ デザイン パターンの良い候補のようです。それにはかなりの量があり、as3dp.comのように

于 2012-08-17T19:22:23.827 に答える
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}
}

簡単に帽子を追加できます。

于 2012-08-17T20:06:13.140 に答える