0

我需要创建一个具有多态对象的系统。

每种类型的对象都应由特定的处理程序处理,因此我需要确定正确处理它的类型。

我想知道最好的设计决定是什么:

  • 创建一个类似的抽象基类ObjectBase,然后扩展到特定的对象,比如CustomObjectACustomObjectB

  • 创建一个通用对象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);
          }
       }
    }
4

2 回答 2

0

让所有处理程序共享一个基类。让对象使用在基类上抽象的工厂方法创建正确的处理程序。

于 2012-10-29T09:22:33.937 回答
0

我会推荐你​​第一种方式。创建 2 个没有主体的对象并不难,但是如果您想在未来改变它们的行为 - 您将有一些事情可以完成。

于 2012-10-29T09:23:32.997 回答