Заводская / абстрактная Заводская путаница
После ~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 ответа:
Разница междуфабрикой иабстрактной фабрикой довольно проста. В последнем случае сама фабрика абстрактна (!) и не может быть создан непосредственно, но должен быть подклассом.
В пример, Фабрика:
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/