0

ポリモーフィック オブジェクトを使用してシステムを作成する必要があります。

オブジェクトの各タイプは特定のハンドラーによって処理される必要があるため、オブジェクトを正しく処理するためのタイプを決定する必要があります。

私は何が最良の設計上の決定になるのだろうかと思っています:

  • のような抽象基本クラスを作成し、ObjectBase特定のオブジェクトに拡張しますCustomObjectACustomObjectB

  • ジェネリック オブジェクトを作成し、コンストラクターに渡されたプロパティGenericObjectを使用します (不変である必要があります)。$typetype

オブジェクトに違いはなく、処理方法だけが異なることに注意してください。つまり、追加されたプロパティやメソッド、またはそれらの動作には何もありません。

フィードバックはありますか?


編集:

最初の解決策

abstract class ObjectBase {}


class CustomObjectA extends ObjectBase {}

class HandlerManager {
     public function process(ObjectBase $object) {
          if ($object instanceof CustomObjectA) {

              $customObjectAHandler->process($object);
          }
     }
}

2 番目の解決策

class GenericObject {
    protected $type;

    public function __construct($type)
    {
        $this->type = $type;
    }
}

class ObjectTypeAHandler {
    public function process(GenericObject) { 
    }

    public function supportsType(GenericObject $object)
    {
        return 'typeA' === $object->getType();
    }
}

   class HandlerManager {
       public function process(GenericObject $object) {
          if ($customObjectAHandler->supportType($object)) {
               $customObjectAHandler->process($object);
          }
       }
    }
4

2 に答える 2

0

私はあなたに最初の方法をお勧めします。ボディなしで2つのオブジェクトを作成することはそれほど難しくありませんが、将来それらの動作を変更したい場合は、それを実行するための作業が必要になります。

于 2012-10-29T09:23:32.997 に答える
0

すべてのハンドラーが基本クラスを共有するようにします。オブジェクトに、基本クラスで抽象化されたファクトリ メソッドを使用して正しいハンドラーを作成させます。

于 2012-10-29T09:22:33.937 に答える