|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Паттерн Фабричний метод (Factory Method)Призначення. Фабричний метод – породжувальний паттерн, також відомий під ім’ям Віртуальний конструктор.Визначає інтерфейс для створення об’єкта, але залишає підкласами рішення про те, який клас інстанціювати. Фабричний метод дозволяє класу делегувати інстанціювання підкласами [10,22]. Частота використання Мотивація застосування. Отже, паттерн Factory Method дає можливість підкласами створювати деякі класи за допомогою загального інтерфейсу. Причому саме нащадки визначають, який батьківський об’єкт слід реалізувати, паттерн призначений для того, щоб делегувати їм такі повноваження. Завдяки цьому в тексті програми можна оперувати не якимись конкретними класами, а їх абстрактними представленнями. Паттерн слід використовувати коли [10,12,16]: - клас не повинен залежати від конкретного типу створюваного продукту; - класу не відомий конкретний тип продукту, який йому треба створювати; - конкретні типи створюваних продуктів можуть/повинні визначатися у підкласах; - необхідно перенести реалізацію правил створення екземпляра об’єкта в деякий похідний клас. У таких випадках найбільш ефективне рішення полягає в тому, щоб помістити реалізацію методу в той клас, що відповідає за необхідну поведінку. Проблемна предметна область. Передумови виникнення паттерну: нехай розробляється гра типу «стрілялка». У процесі гри герой може вибрати різні типи вогнепальної зброї. Тип зброї визначає частоту пострілів, калібр кулі, тип кулі (наприклад, звичайна або розривна). Для простоти викладу ідеї будемо вважати, що конкретний тип зброї може стріляти тільки одним типом куль (рис. 4.10).
Рис. 4.10. Діаграма класів предметної області
Маємо наступне питання. Як пов’язати конкретний клас зброї з типом куль, якими він стріляє? Логічно було б покласти обов’язок за створення екземпляра кулі на об’єкт класу зброї, з якого виробляється постріл. Таким чином, кожен з конкретних типів зброї буде знати, до якого класу належать його кулі. Викладений підхід володіє такими перевагами: - клієнтському коду не треба піклуватися про конфігурування екземпляра зброї специфічним йому типом кулі; - кожна куля при пострілі конфігурується параметрами (початкова швидкість, початкове положення), про які знає тільки зброя, з якої проводиться постріл; - клієнтському коду має бути відомо тільки про абстрактну кулю, тобто з кожним конкретним екземпляром кулі клієнт взаємодіє через інтерфейс АбстрактнаКуля (що дозволяє спростити його архітектуру). Один з основних недоліків запропонованого підходу полягає в тому, що тип кулі для конкретного класу зброї визначається статично на етапі компіляції і не може змінюватися на етапі виконання. Структуру паттерну представлено на рисунку 4.11.
Рис. 4.11. Діаграма класів паттерна Factory Method
Паттерн Фабричний Метод, як всі інші різновиди фабрик, надає спосіб інкапсуляції створення екземплярів конкретних типів. Так, із приведеної нижче діаграми класів видно, що абстрактний клас Creator надає інтерфейс до методу створення об’єктів, також названому «фабричним методом». Інші методи, реалізовані в абстрактному класі Creator, працюють з продуктами, створеними фабричним методом. Тільки субкласи фактично реалізують фабричний метод і створюють продукти. Розробники часто говорять, що Фабричний Метод дозволяє субкласам вибрати тип створюваного екземпляра. Мається на увазі не те, що паттерн дозволяє субкласам приймати самостійне рішення під час виконання, а те, що клас-творець не має інформацію про фактичний тип створюваних продуктів (останній визначається винятково типом використовуваного субкласу). Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |