| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Factory Pattern |
| Автор: gta4kv 8.5.2009, 10:02 |
| Всем привет Гуглить, честно, поленился. Вопрос, сопсна, в чем смысл паттерна-фабрики? И вообще где можно о паттернах нормально почитать? (online) |
| Автор: azesmcar 8.5.2009, 10:04 |
| gta4kv http://ru.wikipedia.org/wiki/%D0%A4%D0%B0%D0%B1%D1%80%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F) Добавлено через 3 минуты и 1 секунду Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides - Design Patterns а вот наглядный пример http://www.gerd-riesselmann.net/archives/2005/01/encapsulating-database-access-in-php-using-the-factory-design-pattern |
| Автор: gta4kv 8.5.2009, 10:10 |
| Сложно как-то написано, и примера PHP нету. Тогда такой вопрос: в чем его функция в коде? Если с singleton все ясно, то тут, блин, нефига не ясно. \= |
| Автор: azesmcar 8.5.2009, 10:18 | ||
так я же привел ссылку, там пример на ПХП. его функция - предоставить единый интерфейс для создания группы обьектов. в коде помогает избавится от множества switch-case ов к примеру. Допустим мы должны создать картинку, в зависимости от какого-то параметра
в принципе это уже можно назвать фабрикой, хотя есть и более красивы реализации |
| Автор: gta4kv 8.5.2009, 10:20 | ||
| А как при этом будет фабрика выглядить? Добавлено через 35 секунд
Она позже появилась, по-этому не заметил |
| Автор: azesmcar 8.5.2009, 10:27 | ||||
| gta4kv наверно этот пример будет лучше
т.е. в зависимости от переданного параметра мы создаем класс для работы с конкретной базой. далее, читаем из конфига к примеру.
Добавлено @ 10:29 так это и есть фабрика патерн это не какая-то конкретная реализация..это скорее мысль, а как ее реализовать - да как угодно |
| Автор: gta4kv 8.5.2009, 10:29 |
| тема сисек не раскрыта в данном примере выходит что от фабрики одно название, остальное просто свитч =) |
| Автор: gta4kv 8.5.2009, 10:53 |
| Ладно, вроде что-то прояснилось azesmcar, большое спасибо |
| Автор: Kirsan 8.5.2009, 11:03 |
| Очень советую почитать книгу, про которую azesmcar говорил (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides - Design Patterns). Довольно доступным языком излагается материал. В Сети имеется переведённый вариант. |
| Автор: ksnk 8.5.2009, 11:27 | ||
| gta4kv, Можно вернуться к идологическим основам ООП. Основной постулат звучит примерно так -- все в окружающем мире - хз-как-устроенные-черные-ящики-объекты, к которым добрые люди прикрутили немного рукояток. чтобы за них дергать и хвататься. -- Программирование, в смысле ООП - прикручивание этих самых объектов нужными ручками к нужным местам других объектов. Итого - возникает понятие красоты объекта, в смысле ООП -- чем меньше ручек, при условии, что задача решается, тем красивее объект. А красота ящика OOП не интересует, ящик он и у индусов ящик... Фабрика позволяет сократить количество ручек в определенных условиях у некоторых объектов если вернуться к примеру azesmcar, то можно его переписать вот так
понятно, что этому классу не хватает "для полноты" способов динамической регистрации новых типов баз данных и обработки ошибочных ситуаций... |
| Автор: skyboy 8.5.2009, 11:56 | ||||
| в PHP есть работа с строками, как с лексемами. например:
там, где это невозможно(например, С++) пришлось бы писать:
код вполне может быть нерабочий(например, объекты могут конструироваться немного не таким кодом), с С/С++ давно дела не имел. И если бы пришлось добавлять в иерархию новый класс, надо было бы искать в коде все подобные switch'и и редактировать список case'ов. Для PHP, как мне кажется, это неактуально. Вообще, паттерны - это не универсальная лопатка. К примеру, singleton средствами ООП в классическом Pascal with objects не реализуешь - там нет статических членов класса, только методы. Значит, приходится использовать предопределенную ячейку памяти для хранения или выделять глобальную переменную.(кстати, поправьте, если ошибаюсь). Добавлено через 5 минут и 49 секунд это я так замысловато хотел сказать про переменные переменные и создание объектов по имени класса в строке. но, кажется, в том виде получилась высокопарная глупость. |
| Автор: azesmcar 8.5.2009, 12:07 |
В С++ есть шаблоны, шаблонные классы и шаблонные классы унаследованные от нешаблонных классов Фабрика там очень красиво реализуется. |
| Автор: skyboy 8.5.2009, 12:22 | ||
которые появились не внезапно кроме того, есть ещё куча языков. и везде по-разному. в Delphi, например, есть метаклассы(класс классов, переменная такого типа хранит указатель на класс). то есть создание объекта выглядит так:
и там тоже нет нужды в фабрике. по крайней мере, до тех пор, пока мы можем использовать имя класса(а не некую абстрактную переменную-флаг) для определения класса создаваемого объекта. С другой стороны, наверняка есть куча ОО-языков, которые не позволяют вольности, как в PHP, не имеют механизмов метаклассов, как в Delphi и не обзавелись механизмом шаблонов кто ж спорит, что на шаблонах красиво? |
| Автор: azesmcar 8.5.2009, 12:25 |
| skyboy ну вы же сами сказали что там пришлось бы писать свитч про дельфи знаю только что это что-то связанное с паскалем, который как-то сделали обьекто озабоченным ориентированным |
| Автор: gta4kv 8.5.2009, 13:14 |
| skyboy, спасибо за разъяснения =) смысл понятен, вроде |