如何从特定的类或属性中选择定义的类型?

时间:2012-10-29 09:15:22

标签: php oop design-patterns

我需要创建一个包含多态对象的系统。

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

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

  • 创建一个类似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);
          }
       }
    }

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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