我正在学习设计模式。你能帮我设计一下这个班级的工厂模式吗?

时间:2011-03-20 03:43:53

标签: design-patterns factory-pattern

我有一个从其他类的层次结构构建的类,我创建了一堆看起来相同的类,而不是类名

例如

class Class1 extends BaseClass
{
  public function __construct()
  {
     parent::__construct();
  }
}

class Class2 extends BaseClass
{
  public function __construct()
  {
     parent::__construct();
  }
}

class Class3 extends BaseClass
{
  public function __construct()
  {
     parent::__construct();
  }
}

但我意识到(希望是合理的)我可以使用工厂模式创建Class [1-3],只需传递一个类名并让工厂返回其中一个类。这将需要更少的代码,因此更易于维护。另外,如果我想这样做,你会建议如何实施:

class Class4 extends AnotherBaseClass
{
  public function __construct()
  {
     parent::__construct();
  }
}

请注意,类4扩展了另一个基类,但它与AnotherBaseClass保存的一小部分信息完全相同。

现在我在想这样的事情(我的想法在这一点上模糊不清):

//我把重复的代码放在哪里

class Skeleton extends BaseClass
{
  public function __construct()
  {
     parent::__construct();
  }
}


class ClassFactory
{
   public function __construct( $className , $classType )
   {
      <pseudocode>
      Class5 = new $className
      ???and some how make $className extend $classType ???
      return class5
      </pseudocode>
   }

}

工厂模式是否是正确答案?

干杯!

1 个答案:

答案 0 :(得分:0)

是 - 工厂模式是正确的答案。此外,您还可以查看Abstract Factory,特别是您提到的场景,其中您的某些类将具有不同的属性,并且可能派生自其他一些基类。