Factory/Аннотация Factory путаница

После ~ 10 месяцев процедурного PHP я теперь пытаюсь обернуть голову основными принципами ООП и шаблонами проектирования. Это хобби, и у меня есть не так много времени, как я бы хотел его преследовать, поэтому, пожалуйста, простите довольно низкий уровень этого вопроса.

Мой сайт (в настоящее время 100% процедурный) находится в глубине библиотеки. Посетители отправляют библиотеку script 2 datapoints - элемент type и элемент code.

Library.php использует тип элемента для выбора include, а include захватывает код, чтобы попасть в базу данных, а затем создать страницу.

Некоторые примеры:

[type]  [code]
 game    RoTo
 map     32
 unit    216

Пример ссылки будет library.php?type=game&code=RoTo

Все работает хорошо, как есть, но по мере того как я начинаю работу с ООП, я вижу очевидные точки входа и пути наследования для "объективизации" этой системы.

class LibraryObject
{
    protected $_name;
    protected $_description;
}

class Game extends LibraryObject
{
    protected $_releaseDate;
    etc.
}

Я также очень рад гибкости, которую могут дать некоторые хорошо написанные классы.

Идея шаблона дизайна меня отключает. Это похоже на шаблон Factory, но я смущен различиями между F и AF. Я прочитал другие вопросы SO, конкретно задающие этот вопрос, и я прочитал примеры OODesign, но я чувствую, что они написаны на другом языке, и это довольно расстраивает.

Возможно, если кто-то сможет объяснить это с помощью моих собственных структур данных, это будет иметь для меня больше смысла?

Извините за неприятности.

Ответ 1

Разница между Factory и Аннотация Factory довольно проста. В последнем случае сам factory является абстрактным (!) И не может быть создан непосредственно, но должен быть подклассифицирован.

Например, Factory:

class Document {
   public function createPage() {
       return new Page;
   }
}

class LandscapeDocument extends Document {
   public function createPage() {
       return new LandscapePage;
   }
}

В тесте Factory:

abstract class Document {
   abstract public function createPage();
}

class PortraitDocument extends Document {
   public function createPage() {
      return new PortraitPage;
   }
}

class LandscapeDocument extends Document {
   public function createPage() {
      return new LandscapePage;
   }
}

Короче говоря, шаблон factory имеет реализацию по умолчанию в классе factory. Аннотация factory требует, чтобы все подклассы реализовали свою собственную версию методов factory.

Это все, что нужно.

Ответ 2

Вот еще один способ посмотреть на него:

Очистить кусты:
Образец factory является шаблоном создания. То есть он используется для создания экземпляров для использования.

Factory Шаблон

  • Шаблон создания, в котором логика создания экземпляра лежит в классе factory.
  • A factory Шаблон создает только один экземпляр объекта. В вашем случае он создавал бы объекты типа LibraryObject, предполагая, что LibraryObject является самым большим объектом в дереве иерархии.

Абстрактный шаблон (Factory заводов)

  • Шаблон создания, в котором логика создания экземпляра лежит в руках классов, реализующих интерфейс/абстрактный класс factory.
  • Абстрактный шаблон factory может создавать объекты разных типов, поэтому вы можете использовать конкретные реализации интерфейса factory интерфейса/абстрактного класса для создания объектов желаемых типов. Вот почему он называется factory Заводов.

Хорошей ссылкой будет эта ссылка ниже, я бы предложил вам прочитать образец метода factory:
http://www.oodesign.com/creational-patterns/