|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Особливості програмної реалізаціїРеалізувати можливість виконання необмеженої кількості операцій «Скасування» (undo) і «Повтор» (redo) можна за допомогою стека об’єктів Command і стека об’єктів Memento [26]. У Зберігачів є два інтерфейси: «широкий» для Господарів і «вузький» для всіх інших об’єктів. В ідеалі мова реалізації повинна підтримувати два рівні статичного контролю доступу. Послідовність дій для реалізації паттерна: - визначте ролі Посильного і Господаря; - створіть клас Memento та оголосіть Господаря другом; - посильний знає, коли створювати «контрольну точку» Господаря; - Господар створює Зберігача Memento і копіює свій стан в цей Memento; - Посильний зберігає Зберігача Memento; - Посильний знає, коли потрібно «відкотити» Господаря; - Господар відновлює себе, використовуючи збережений в Memento стан. Паттерни Command і Memento визначають об’єкти «чарівна паличка», які передаються від одного власника до іншого і використовуються пізніше. У Command такою «чарівною паличкою» є запит; в Memento – внутрішній стан об’єкта в деякий момент часу. Поліморфізм важливий для Command, але не важливий для Memento тому, що інтерфейс Memento настільки «вузький», що його можна передавати як значення. Command може використовувати Memento для збереження стану, необхідного для виконання скасування дій. Memento часто використовується спільно з Iterator. Iterator може використовувати Memento для збереження стану ітерації. Результати використанн я. Отримані результати застосування архітектури паттерна при розробці програмної системи можуть бути наступними: - збереження границь інкапсуляції. Зберігач дозволяє уникнути розкриття інформації, якою повинен розпоряджатися тільки Господар, але яку проте необхідно зберігати поза ним. Цей паттерн екранує об’єкти від потенційно складного внутрішнього устрою Господаря, не змінюючи границі інкапсуляції; - спрощення структури Господаря. При інших варіантах дизайну, спрямованого на збереження границь інкапсуляції, Господар зберігає всередині себе версії внутрішнього стану, що запитували клієнти. Таким чином, уся відповідальність за керування пам’яттю лежить на Господарі. При перекладанні турботи про запитаний стан на клієнтів спрощується структура Господаря, а клієнтам дається можливість не інформувати Господаря про те, що вони закінчили роботу; - значні витрати при використанні Зберігачів. Зі Зберігачами можуть бути пов’язані значні витрати, якщо Господар повинний копіювати великий обсяг інформації для занесення в пам’ять Зберігача або якщо клієнти створюють і повертають Зберігачів досить часто. Якщо плата за інкапсуляцію і відновлення стану Господаря велика, то цей паттерн не завжди підходить; - визначення «вузького» і «широкого» інтерфейсів. У деяких мовах складно гарантувати, що тільки Господар має доступ до стану Зберігача; - схована плата за зміст Зберігача. Посильний відповідає за видалення Зберігача, однак не має інформацію про те, який обсяг інформації про стан схований у ньому. Тому невимогливий до ресурсів Посильний може витрачати дуже багато пам’яті при роботі зі Зберігачем. Паттерн Стратегія (Strategy) Призначення. Паттерн Стратегія – це паттерн поведінки, що визначає сімейство алгоритмів, інкапсулює кожен з них і робить їх взаємозамінними. Стратегія дозволяє змінювати алгоритми незалежно від клієнтів, які ними користуються [14]. Частота використання Мотивація застосування. Існують системи, поведінка яких може визначатися відповідно до одного алгоритму з деякого сімейства. Всі алгоритми цього сімейства є родинними: призначені для розв’язання загальних задач, мають однаковий інтерфейс для використання і відрізняються тільки реалізацією (поведінкою). Користувач, попередньо настроївши програму на потрібний алгоритм (вибравши стратегію), одержує очікуваний результат. Рекомендується використовувати паттерн коли: - є багато споріднених класів, що відрізняються тільки поведінкою; - необхідно конфігурувати клас, задавши одну з можливих поведінок; - потрібно мати декілька різних варіантів алгоритму; - у класі визначено багато поведінок, що реалізовані завдяки розгалуженим умовним операторами. В цьому випадку простіше перенести код з гілок в окремі класи стратегій; - в алгоритмі містяться дані, про які клієнт не повинен «знати». Використовуйте паттерн Стратегія, щоб не розкривати складні, специфічні для алгоритму структури даних. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |