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

时间:2012-02-08 17:53:51

标签: php design-patterns class-design

我有一个存储人员和公司的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.`

3 个答案:

答案 0 :(得分:1)

我认为工厂方法适用于本案例,因为该工厂会为您提供您正在寻找的对象 您必须传递某种信息才能让工厂决定应该返回哪个对象。

答案 1 :(得分:1)

抽象工厂模式:

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]");
       }
    }

}

答案 2 :(得分:0)

你如何使用像Doctrine这样的ORM进行这类工作。它支持继承,因此您可以将其映射到数据库模式(这应该是Doctrine中的具体继承类策略)。

否则,请尝试澄清你的目标和具体问题。