Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.11.2011, 15:56
1g0rrr вне форума Посмотреть профиль Отправить личное сообщение для 1g0rrr Найти все сообщения от 1g0rrr
  № 1  
Ответить с цитированием
1g0rrr

Регистрация: Jul 2009
Адрес: Донецк
Сообщений: 25
По умолчанию Помогите разобраться с паттернами Фабрика

Привет. Разбираюсь сейчас с Паттернами, дошёл до фабрик. Но пока-что не особо понимаю, в чём их между ними разница на практике.

Первый вопрос, вы вообще часто используете фабрики в своих проектах, или использовали ли хоть раз? Может для проектов на as3 они не особо применимы?

Вот мои размышления. Самый простой вариант - простая фабрика. Изолируем создание обьекта. Дело полезное, тут всё вроде понятно. Потом нам захотелось сделать другую фабрику, которая немного отличается, но имеет тот же интерфейс что и предедущая. И поэтому для того, чтобы код у нас зависел от абстракций, а не от конкретных классов, мы решаем воспользоваться Фабричным методом, с помощью которого мы переопределив фабричную функцию, создаём нужные обьекты.

Уже в этом месте я слабо представляю где я могу это применить. Хотя примерно представляю, что я с помощью этого Паттерна смогу сделать набор классов, которые потом не прийдётся менять. Мне достаточно будет переопределить фабричный интерфейс и создавать нужные мне обьекты. Правильно я понимаю?
И тут появляется абстрактная фабрика. Еще более глубокий уровень абстракции. Тут я уже совсем теряюсь. Как я понимаю, она нужна, когда нам нужно создать сразу набор обьектов. Но мне кажется это уже черезчур сложная схема. Сложно представить, когда необходимо её использовать в например в флэш-игрушках и при этом обычный, параметризированный, фабричный метод будет плох.

Что скажете по поводу этих мыслей? Помогите раскрыть суть этих паттернов.

Старый 18.11.2011, 16:39
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 2  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Эта... если прочитали про паттерн, то не нужно искать место куда бы его пихнуть. Главное их знать, и понимать разницу, со временем они сами будут приходить на ум.

Старый 18.11.2011, 16:46
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 3  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
мне приходит на ум только, что-то вроде :
Код AS3:
 
public function imageDecodeFactory(imageType:String):IImageDecoder
{
    switch(imageType)
   {
      case "jpeg":
          return new JPEGDecoder();
      break;
      case "mbp":
          return new BMPDecoder();
      break;
      default:
          return new RawDecoder();
      break;
   }
 return new RawDecoder();
}
Хотя может я и не прав, сам только паттерны изучаю.
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 18.11.2011, 18:28
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 4  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
мне приходит на ум только, что-то вроде :
wxvxw научил:

Код AS3:
private var _types:Object = {};
_types["jpeg"] = JPEGDecoder;
_types["bmp"] = BMPDecoder;
_types["png"] = PNGDecoder;
_types["raw"] = RAWDecoder;
public function imageDecodeFactory(imageType:String):IImageDecoder
{
     var cls:Class = _types[imageType]||RawDecoder;
     return new cls();
}
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 18.11.2011, 19:15
smithy вне форума Посмотреть профиль Отправить личное сообщение для smithy Найти все сообщения от smithy
  № 5  
Ответить с цитированием
smithy

Регистрация: Oct 2011
Адрес: Питер
Сообщений: 58
@Genzo, в случае декодирования я бы применил шаблон Стратегия

Кстати да, в них можно запутаться =).

Старый 18.11.2011, 21:01
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 6  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Как можно в них запутаться? Фабрики порождают объекты стратегии.
__________________
Отряд Котовскага

Старый 18.11.2011, 22:38
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 7  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Порожденный фабрикой объект стратегии пользуется фабрикой для порождения объекта стратегии.

- Абстрактная фабрика штампует объекты разных классов с одинаковыми интерфейсами.
- Фабричный метод в суперклассе поможет при переопределении этого метода наштамповать кучу любых объектов. Чем-то похоже на UIComponent#createChildren во Flex framework.
- Builder фигачит сложный (комплексный) объект, создавая его и простейшие объекты, в него входящие.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 19.11.2011, 03:15
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 8  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Чем-то похоже на UIComponent#createChildren во Flex framework.
Не похоже.
Во флексе есть отдельная фабрика. ClassFactory.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 19.11.2011, 15:37
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 9  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
1. Фабрика обыкновенная

Со свитчами как-то не выходит использовать, может оно и к лучшему, конечно.

А вот передавать фабрику рендереров какому-нибудь визуальному списку - пракрически везде в социалках используются эти списки. Правда часто вместо класса-фабрики достаточно передать создающий метод или сам класс как фабрику.
Ну т.е. простая фабрика(или просто функция или класс - сути дела не меняет) используется чтобы сказать какому-нибудь компоненту, какие объекты он должен создавать (иначе получиться, что не сможет создавать объекты разных типов)

2. Фабричный метод.

Да, часто используется. Например Вы считаете, что параметризовать объект фабрикой слишком сложно, проще создать еще одного наследника того же листа и перегрузить метод createRenderer():IRenderer
Естественно, не подходит, если типы создаваемых объектов надо менять динамически

3. Абстрактная фабрика.

Практически не используется. Слишком большой оверхед. Может быть только в библиотеках от нее будет какая-то польза. Обычно выгоднее пареметризировать создание отдельных объектов, чем реализовывать интерфейсы создания сразу нескольких.

4. Статичная фабрика (или фабрика-синглтон)

Использую для получения правильно заскинованных компонентов. Чтобы не разбрасывать код по скинованию по всему приложению и можно было меньшей кровью поменять везде красные кнопки на желтые, например.
Недостатки - завязывает все приложение на один класс (в котором куча методов, не нужных отдельным компонентам), в библиотеках практически не применима

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


Последний раз редактировалось expl; 19.11.2011 в 15:43.
Старый 21.11.2011, 22:35
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 10  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Сообщение от alatar Посмотреть сообщение
Не похоже.
Во флексе есть отдельная фабрика. ClassFactory.
Твой пример неверный. А я прав.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Создать новую тему Ответ Часовой пояс GMT +4, время: 08:40.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
Абстрактная фабрика , Простая фабрика , Фабричный метод
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 08:40.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.