![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
gta4kv |
|
|||
![]() Walking around mad. ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1868 Регистрация: 25.7.2006 Репутация: 21 Всего: 91 |
Всем привет
![]() Гуглить, честно, поленился. Вопрос, сопсна, в чем смысл паттерна-фабрики? ![]() И вообще где можно о паттернах нормально почитать? (online) ![]() |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 12 Всего: 211 |
gta4kv
http://ru.wikipedia.org/wiki/%D0%A4%D0%B0%...BD%D0%B8%D1%8F) Добавлено через 3 минуты и 1 секунду Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides - Design Patterns а вот наглядный пример http://www.gerd-riesselmann.net/archives/2...-design-pattern |
|||
|
||||
gta4kv |
|
|||
![]() Walking around mad. ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1868 Регистрация: 25.7.2006 Репутация: 21 Всего: 91 |
Сложно как-то написано, и примера PHP нету.
Тогда такой вопрос: в чем его функция в коде? Если с singleton все ясно, то тут, блин, нефига не ясно. \= Это сообщение отредактировал(а) gta4kv - 8.5.2009, 10:11 |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 12 Всего: 211 |
так я же привел ссылку, там пример на ПХП. его функция - предоставить единый интерфейс для создания группы обьектов. в коде помогает избавится от множества switch-case ов к примеру. Допустим мы должны создать картинку, в зависимости от какого-то параметра
в принципе это уже можно назвать фабрикой, хотя есть и более красивы реализации Это сообщение отредактировал(а) azesmcar - 8.5.2009, 10:19 |
|||
|
||||
gta4kv |
|
|||
![]() Walking around mad. ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1868 Регистрация: 25.7.2006 Репутация: 21 Всего: 91 |
А как при этом будет фабрика выглядить?
Добавлено через 35 секунд
Она позже появилась, по-этому не заметил ![]() |
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 12 Всего: 211 |
gta4kv
наверно этот пример будет лучше
т.е. в зависимости от переданного параметра мы создаем класс для работы с конкретной базой. далее, читаем из конфига к примеру.
Добавлено @ 10:29 так это и есть фабрика ![]() патерн это не какая-то конкретная реализация..это скорее мысль, а как ее реализовать - да как угодно ![]() Это сообщение отредактировал(а) azesmcar - 8.5.2009, 10:29 |
||||
|
|||||
gta4kv |
|
|||
![]() Walking around mad. ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1868 Регистрация: 25.7.2006 Репутация: 21 Всего: 91 |
тема сисек не раскрыта
в данном примере выходит что от фабрики одно название, остальное просто свитч =) |
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 12 Всего: 211 |
ну так шаблон проектирования это и есть название с его описанием ![]() фабрика - это предоставление единого интерфейса, для создания множества обьектов. Добавлено @ 10:44 Например, чтобы было понятнее..еще одна реализация. Правда мне она не очень нравится, просто для примера
Это сообщение отредактировал(а) azesmcar - 8.5.2009, 10:45 |
||||
|
|||||
gta4kv |
|
|||
![]() Walking around mad. ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1868 Регистрация: 25.7.2006 Репутация: 21 Всего: 91 |
Ладно, вроде что-то прояснилось
![]() azesmcar, большое спасибо ![]() |
|||
|
||||
Kirsan |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 4.11.2008 Где: г.Волжский, Волго градская обл. Репутация: 1 Всего: 1 |
Очень советую почитать книгу, про которую azesmcar говорил (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides - Design Patterns). Довольно доступным языком излагается материал.
В Сети имеется переведённый вариант. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
gta4kv, Можно вернуться к идологическим основам ООП. Основной постулат звучит примерно так
-- все в окружающем мире - хз-как-устроенные-черные-ящики-объекты, к которым добрые люди прикрутили немного рукояток. чтобы за них дергать и хвататься. -- Программирование, в смысле ООП - прикручивание этих самых объектов нужными ручками к нужным местам других объектов. Итого - возникает понятие красоты объекта, в смысле ООП -- чем меньше ручек, при условии, что задача решается, тем красивее объект. А красота ящика OOП не интересует, ящик он и у индусов ящик... Фабрика позволяет сократить количество ручек в определенных условиях у некоторых объектов ![]() если вернуться к примеру azesmcar, то можно его переписать вот так
понятно, что этому классу не хватает "для полноты" способов динамической регистрации новых типов баз данных и обработки ошибочных ситуаций... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
skyboy |
|
||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
в PHP есть работа с строками, как с лексемами.
например:
там, где это невозможно(например, С++) пришлось бы писать:
код вполне может быть нерабочий(например, объекты могут конструироваться немного не таким кодом), с С/С++ давно дела не имел. И если бы пришлось добавлять в иерархию новый класс, надо было бы искать в коде все подобные switch'и и редактировать список case'ов. Для PHP, как мне кажется, это неактуально. Вообще, паттерны - это не универсальная лопатка. К примеру, singleton средствами ООП в классическом Pascal with objects не реализуешь - там нет статических членов класса, только методы. Значит, приходится использовать предопределенную ячейку памяти для хранения или выделять глобальную переменную.(кстати, поправьте, если ошибаюсь). Добавлено через 5 минут и 49 секунд это я так замысловато хотел сказать про переменные переменные и создание объектов по имени класса в строке. но, кажется, в том виде получилась высокопарная глупость. |
||||
|
|||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 12 Всего: 211 |
||||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
которые появились не внезапно ![]() кроме того, есть ещё куча языков. и везде по-разному. в Delphi, например, есть метаклассы(класс классов, переменная такого типа хранит указатель на класс). то есть создание объекта выглядит так:
и там тоже нет нужды в фабрике. по крайней мере, до тех пор, пока мы можем использовать имя класса(а не некую абстрактную переменную-флаг) для определения класса создаваемого объекта. С другой стороны, наверняка есть куча ОО-языков, которые не позволяют вольности, как в PHP, не имеют механизмов метаклассов, как в Delphi и не обзавелись механизмом шаблонов ![]() кто ж спорит, что на шаблонах красиво? ![]() |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 12 Всего: 211 |
skyboy
ну вы же сами сказали что там пришлось бы писать свитч ![]() про дельфи знаю только что это что-то связанное с паскалем, который как-то сделали обьекто озабоченным ориентированным ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |