![]() |
MVC+S + шаблон Фабрика ( Factory )
Начав читать интереснейшие статьи про различные паттерны проектирования, я стал их заложником.
Все они хорошие, все призваны упростить и улучшить код, но хорошее не всегда лучшее и чтобы не отклониться от курса, очень хочется, чтобы опытные, матёрые "кутюрье интернета", поделились секретами о структурировании и создании классов. И эту тему я создал не из любопытства, а как уже упомянул ранее, из-за неоднозначных слов про то, что "абстрактную фабрику" в проектах не используют. Хоть такой паттерн и есть, но он как я понял не для жизни. И там же говорилось о "обычной фабрике" о которой я не понял не чего.. ГУРУ ? Добавлено через 13 часов 26 минут Код AS3:
Код AS3:
Ну ведь так же и "абстрактная фабрика" устроенна - это тоже класс, экземпляр которого мы не создаем... |
Так и есть. Просто в обиходе не заморачиваются и абстрактную фабрику называют фабрикой. Паттерн фабрика впринципе один. Тут путаницы быть не должно.
И там были еще вопросы про фабричный метод. Фабричный метод это фабричный метод. Фабричный метод может быть одним из вариантов реализации фабрики. |
какой-то ужас написали... ладно, названия классов и методов перепутаны, я еще могу как-то сопоставить. Но оверрайд не может быть с другой сигнатурой
Цитата:
А вот абстрактная тем и отличается, что её экземпляр создать невозможно, потому что он абстрактный. (в моем примере Фабричного метода это был бы интерфейс ЯЗавод. Вы ведь не можете создать экземпляр интерфейса?). Вы создаете экземпляры классов-наследников, и используете их, подставляя нужный. ОК, давайте простой пример. Шахматы. Есть белые и черные фигуры. Есть Абстрактная фабрика с шестью методами, создающими экземпляры фигур — коня, короля, ферзя и т.д. И два класса-наследника, белая фабрика и черная фабрика. Ваше приложение знает ТОЛЬКО абстактную фабрику, у которой можно запросить коня или ладью. Оно не знает, будет конь белым или черным. Или серобуромалиновым в крапинку. Кто-то свыше устанавливает режим "белый", и место абстрактной фабрики занимает конкретная Белая фабрика, которая может отдавать только белых коней и королей. Вот и весь фокус. Это всего-лишь обычный полиморфизм. Клиент не знает, с каким конкретно классом работает, потому что работает с абстрактным суперклассом или интерфейсом. И какой конкретный класс будет производить набор фигур, решается в другом месте. В этом суть паттерна Абстрактная Фабрика. Похоже это хоть чем-то на обычный класс, производящий экземпляры? Смотреть то надо не на результат, а на решаемую задачу. А задачи у них абсолютно разные. |
Холивары про паттерны - это зло.
Надо думать как задачу решить, а не как назвать решение)) |
Абстрактная фабрика производит конкретные фабрики, которые вы используете для получения конкретного продукта.
Код AS3:
Все фабрики, выпускаемые фабрикой AbstractFactory имеют тип интерфейса IHouseFactory, который умеет производить части дома: фундамент createBasement, окна createWindow, перекрытия, лестничные пролеты и прочая конкретного типа домов (серии). Код AS3:
ЗЫ. Почитателям друпального агрегатирования привет от инди-разработчика! |
Вложений: 1
Цитата:
Начну с "Абстрактной Фабрики". Код AS3:
Код AS3:
Код AS3:
Код AS3:
Код AS3:
Код AS3:
Код AS3:
Код AS3:
Код AS3:
|
Цитата:
Если я в классе Main ( как в моём примере ) сразу обращаться к классу Белые фигуры, то это и будет "просто фабрика" ? |
Нет BlackFigure, WhiteFigyre. Есть
|
Цитата:
|
dimarik, хороший пример, спасибо)))
У GoF тоже нормальный пример (мой конечно не очень логичен)) — есть некий интерфейс (GUI) приложения, скажем кнопка, скроллбар, дропменю и чекбокс. И есть два (или больше) стилей для отображения этого интерфейса. Допустим, приложение может выглядеть в стиле Windows, а может в стиле MacOS. Самому приложению совершенно все равно, как выглядят эти кнопки и бары, но они, конечно же, должны соответствовать своим типам, чтобы можно было задавать им значения и запрашивать их. У приложения есть класс или функция, который должен создать и расставить элементы интерфейса. Он обращается к фабрике, которая представлена Абстрактным Классом или Интерфейсом, и получает от нее экземпляры кнопок и т.п. Код AS3:
|
| Часовой пояс GMT +4, время: 17:50. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.