用于创建子类的对象实例的设计模式


Design pattern for creating objects instance of child classes

我有一个MySQL表,用于存储人员和公司。他们有相同的领域。在php中,我有

class User{
var $_id;
var $_data;
function loadDataFromDb()
{
}
}
class Company extends User
{
    function getName()
    {
    //some implemantation
    }
}

class People extends User
{
function getName()
{
//some implemantation
}
}

创建对象的最佳方式是什么。当我创建我的对象时,我不知道哪种类型的客户端。

我需要类似的东西:

$user = /* code missing */
$user->getName(); // this will trigger the appropiate method.`

我认为工厂方法将适用于当前情况,因为这个工厂将为您提供您要查找的对象
不过,您必须传递某种信息,让工厂决定应该返回哪个对象。

抽象工厂模式:

interface AbstractUserFactory{
   public function buildUser($type);
}
class UserFactory implements AbstractUserFactory {
    public function buildUser($type='user'){
       if($type == 'user'){
          return new User();
       } else if ($type == 'company') {
          return new Company();
       } else if($type == 'people' ) {
          return new People();
       } else{
          throw new Exception("Unknown User type [$type]");
       }
    }
}

在这类工作中使用类似ORM的条令怎么样。它支持继承,因此您可以将其映射到数据库模式(这应该是Doctrine中的具体继承类策略)。

否则,试着在这里澄清你的目标和具体问题是什么。