我需要创建一个具有多态对象的系统。
每种类型的对象都应由特定的处理程序处理,因此我需要确定正确处理它的类型。
我想知道最好的设计决定是什么:
创建一个类似的抽象基类
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);
}
}
}
第二种解决方案
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);
}
}
}