Я изучаю шаблоны проектирования.Можете ли вы помочь мне разработать фабричный шаблон для этого класса? - PullRequest
0 голосов
/ 20 марта 2011

У меня есть класс, построенный из иерархии других классов, и я создал группу тех же классов, которые выглядели одинаково, кроме имени класса

, например

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 голосов
/ 20 марта 2011

Да - фабричный шаблон - правильный ответ.Кроме того, вы также можете проверить Abstract Factory , специально для упомянутого вами сценария, в котором некоторые ваши классы будут иметь разные атрибуты и могут быть производными от некоторого другого базового класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...