![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jul 2009
Адрес: Донецк
Сообщений: 25
|
Привет. Разбираюсь сейчас с Паттернами, дошёл до фабрик. Но пока-что не особо понимаю, в чём их между ними разница на практике.
Первый вопрос, вы вообще часто используете фабрики в своих проектах, или использовали ли хоть раз? Может для проектов на as3 они не особо применимы? Вот мои размышления. Самый простой вариант - простая фабрика. Изолируем создание обьекта. Дело полезное, тут всё вроде понятно. Потом нам захотелось сделать другую фабрику, которая немного отличается, но имеет тот же интерфейс что и предедущая. И поэтому для того, чтобы код у нас зависел от абстракций, а не от конкретных классов, мы решаем воспользоваться Фабричным методом, с помощью которого мы переопределив фабричную функцию, создаём нужные обьекты. Уже в этом месте я слабо представляю где я могу это применить. Хотя примерно представляю, что я с помощью этого Паттерна смогу сделать набор классов, которые потом не прийдётся менять. Мне достаточно будет переопределить фабричный интерфейс и создавать нужные мне обьекты. Правильно я понимаю? И тут появляется абстрактная фабрика. Еще более глубокий уровень абстракции. Тут я уже совсем теряюсь. Как я понимаю, она нужна, когда нам нужно создать сразу набор обьектов. Но мне кажется это уже черезчур сложная схема. Сложно представить, когда необходимо её использовать в например в флэш-игрушках и при этом обычный, параметризированный, фабричный метод будет плох. Что скажете по поводу этих мыслей? Помогите раскрыть суть этих паттернов. |
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Эта... если прочитали про паттерн, то не нужно искать место куда бы его пихнуть. Главное их знать, и понимать разницу, со временем они сами будут приходить на ум.
|
|
|||||
|
мне приходит на ум только, что-то вроде :
Хотя может я и не прав, сам только паттерны изучаю.
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works. |
|
|||||
|
Цитата:
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
|
Регистрация: Oct 2011
Адрес: Питер
Сообщений: 58
|
|
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Как можно в них запутаться? Фабрики порождают объекты стратегии.
__________________
Отряд Котовскага |
|
|||||
|
.
|
Порожденный фабрикой объект стратегии пользуется фабрикой для порождения объекта стратегии.
- Абстрактная фабрика штампует объекты разных классов с одинаковыми интерфейсами. - Фабричный метод в суперклассе поможет при переопределении этого метода наштамповать кучу любых объектов. Чем-то похоже на UIComponent#createChildren во Flex framework. - Builder фигачит сложный (комплексный) объект, создавая его и простейшие объекты, в него входящие. |
|
|||||
|
1. Фабрика обыкновенная
Со свитчами как-то не выходит использовать, может оно и к лучшему, конечно. А вот передавать фабрику рендереров какому-нибудь визуальному списку - пракрически везде в социалках используются эти списки. Правда часто вместо класса-фабрики достаточно передать создающий метод или сам класс как фабрику. Ну т.е. простая фабрика(или просто функция или класс - сути дела не меняет) используется чтобы сказать какому-нибудь компоненту, какие объекты он должен создавать (иначе получиться, что не сможет создавать объекты разных типов) 2. Фабричный метод. Да, часто используется. Например Вы считаете, что параметризовать объект фабрикой слишком сложно, проще создать еще одного наследника того же листа и перегрузить метод createRenderer():IRenderer Естественно, не подходит, если типы создаваемых объектов надо менять динамически 3. Абстрактная фабрика. Практически не используется. Слишком большой оверхед. Может быть только в библиотеках от нее будет какая-то польза. Обычно выгоднее пареметризировать создание отдельных объектов, чем реализовывать интерфейсы создания сразу нескольких. 4. Статичная фабрика (или фабрика-синглтон) Использую для получения правильно заскинованных компонентов. Чтобы не разбрасывать код по скинованию по всему приложению и можно было меньшей кровью поменять везде красные кнопки на желтые, например. Недостатки - завязывает все приложение на один класс (в котором куча методов, не нужных отдельным компонентам), в библиотеках практически не применима Впринципе, можно заменить кучей классов - наследников компонентов, которые их скинуют, или саму фабрику разбить на десяток-другой классов, но, как бы, обычно не сильно надо. Последний раз редактировалось expl; 19.11.2011 в 15:43. |
![]() |
![]() |
Часовой пояс GMT +4, время: 05:26. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| Абстрактная фабрика , Простая фабрика , Фабричный метод |
|
|