我需要创建一个包含多态对象的系统。
每种类型的对象都应该由特定的处理程序处理,我需要确定正确处理它的类型。
我想知道什么是最好的设计决定:
创建一个类似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);
}
}
}
答案 0 :(得分:0)
让所有处理程序共享一个基类。让对象使用基类的抽象工厂方法创建正确的处理程序。
答案 1 :(得分:0)
我会推荐你第一种方式。没有身体创建2个对象并不困难,但是如果你想在将来改变他们的行为 - 你将有一些东西可以完成它。