Заводская / абстрактная Заводская путаница


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

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

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

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

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

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

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

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

Извините за беспокойство.

2 14

2 ответа:

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

В пример, Фабрика:

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

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

В Абстрактной Фабрике:

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;
   }
}
Короче говоря, Фабричный шаблон имеет реализацию по умолчанию в самом фабричном классе. Абстрактная Фабрика требует, чтобы все подклассы реализовали свою собственную версию фабрики методы.

Вот и все.

Вот еще один способ взглянуть на это:

Чтобы очистить кусты:
Фабричная модель - это модель созидания. То есть он используется для создания экземпляров для использования.

Фабричный Шаблон

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

Абстрактный узор (Фабрика фабрик)

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

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