【问题标题】:I am learning design patterns. Can you help me design a factory pattern for this class?我正在学习设计模式。你能帮我为这个类设计一个工厂模式吗?
【发布时间】:2011-03-20 03:43:53
【问题描述】:

我有一个从其他类的层次结构构建的类,并且我创建了一堆相同的类,除了类名之外看起来相同

例如

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>
   }

}

工厂模式是正确的答案吗?

干杯!

【问题讨论】:

  • “我创建了一堆相同的类,除了类名之外看起来完全一样”——永远不要这样做。

标签: design-patterns factory-pattern


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    相关资源
    最近更新 更多