ポリモーフィック オブジェクトを使用してシステムを作成する必要があります。
オブジェクトの各タイプは特定のハンドラーによって処理される必要があるため、オブジェクトを正しく処理するためのタイプを決定する必要があります。
私は何が最良の設計上の決定になるのだろうかと思っています:
のような抽象基本クラスを作成し、
ObjectBase
特定のオブジェクトに拡張しますCustomObjectA
。CustomObjectB
ジェネリック オブジェクトを作成し、コンストラクターに渡されたプロパティ
GenericObject
を使用します (不変である必要があります)。$type
type
オブジェクトに違いはなく、処理方法だけが異なることに注意してください。つまり、追加されたプロパティやメソッド、またはそれらの動作には何もありません。
フィードバックはありますか?
編集:
最初の解決策
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);
}
}
}