Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Proxy точно знает, с каким классом он работает, в отличие от Decorator.




Преимущества от применения:

  • удаленный заместитель;
  • виртуальный заместитель может выполнять оптимизацию;
  • защищающий заместитель;
  • "умная" ссылка;

Недостаток:

  • резкое увеличение времени отклика.

Сфера применения: Шаблон Proxy может применяться в случаях работы с сетевым соединением, с огромным объектом в памяти (или на диске) или с любым другим ресурсом, который сложно или тяжело копировать. Хорошо известный пример применения — объект, подсчитывающий число ссылок.

\\Проблема: Необходимо управлять доступом к объекту, так чтобы создавать громоздкие объекты "по требованию".

\\Решение: Создать суррогат громоздкого объекта.

------------------------------------------------------------------------------------------

Composite – Компоновщик

Composite pattern — ШП, к-рый объединяет объекты в древовидную структуру для представления иерархии от частного к целому. Компоновщик позволяет клиентам обращаться к отдельным объектам и к группам объектов одинаково.

Цель: Паттерн определяет иерархию классов, которые одновременно могут состоять из примитивных и сложных объектов, упрощает архитектуру клиента, делает процесс добавления новых видов объекта более простым.

\\Проблема: Как обрабатывать группу или композицию структур обьектов одновременно?

\\Решение: Определить классы для композитных и атомарных обьектов таким образом, чтобы они реализовывали один и тот же интерфейс.

 

 

Порождающие Шаблоны. Lazy Initialization, Singleton

Порождающие шаблоны (Creational patterns) — ШП, которые абстрагируют процесс инстанцирования. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять инстанцируемый класс, а шаблон, порождающий объекты, делегирует инстанцирование другому объекту.

Lazy Initialization – «Ленивая» инициализация

Задача: Создать простой экз-р класса.

Контекст: Инициал-ция экз-ра кл. явл-ся ресурсоёмк. опер-цией.

Решение: Создавать экз-р кл. непосредственно перед обращением к нему.

Приём в программировании, когда некоторая ресурсоёмкая операция (создание объекта, вычисление значения) выполняется непосредственно перед тем, как будет использован её результат. Таким образом, инициализация выполняется «по требованию», а не заблаговременно. Аналогичная идея находит применение в самых разных областях: напр-р, компиляция «на лету».

Частный случай ленивой инициализации — создание объекта в момент обращения к нему — является одним из порождающих шаблонов проектирования.

Достоинства:

- Иниц-ция выполн-ся только в тех случ-х, когда она действ-но необх-ма;

- ускоряется начальная инициализация.

Недостатки:

- Невозможно явным образом задать порядок инициализации объектов;

- возникает задержка при обращении к объекту.

Singleton – Одиночка

Задача: Создать простой экз-р класса.

Контекст: Необх-мо гарантировать единственность создаваем. экз=ра.

Решение: Создавать глобальн. экз-р кл. и предоставлять единственно возможный доступ к нему.

Плюсы:

  • контролируемый доступ к единственному экземпляру;
  • уменьшение числа имён;
  • допускает уточнение операций и представления;
  • допускает переменное число экземпляров;
  • бо́льшая гибкость, чем у операций класса.

Минусы:

  • Глобальные объекты могут быть вредны для объектного программирования, в некоторых случаях приводя к созданию немасштабируемого проекта.
  • Усложняет написание модульных тестов

 

 

Порождающие Шаблоны. Object Pool

Порождающие шаблоны (Creational patterns) — ШП, которые абстрагируют процесс инстанцирования. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять инстанцируемый класс, а шаблон, порождающий объекты, делегирует инстанцирование другому объекту.

Object Pool – Объектный пул

Объектный пул — ШП, набор инициализированных и готовых к использованию объектов. Когда системе требуется объект, он не создаётся, а берётся из пула. Когда объект больше не нужен, он не уничтожается, а возвращается в пул.

Задача: Создавать неск-ко простых экз-ров класса.

Контекст: Инициализация и уничтожение экз-ров – очень ресурсоёмкая операция.

Решение: Создать глобальное хранилище готов. экз-в класса. При запросе нов. экз-ра вместо создания брать его из хранилища, вместо удаления – возвращать в хран-ще.

Опустошение пула:

· Автоматическ. расширение пула.

· Отказ в обслуживании (искл. сит-я)

· Ожид-ие возвращ-ия в пул об-та (для многозадачных сис-м)

Проблемы:

Ø Возвращ-ие в пул об-в, непригодн-х для дальнейш. использ-ия.

Ø Безопасность(возвращён. об-т м-т хранить конфиденциальную инфо).

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

 

 

Порождающие Шаблоны. Prototype

Порождающие шаблоны (Creational patterns) — ШП, которые абстрагируют процесс инстанцирования. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять инстанцируемый класс, а шаблон, порождающий объекты, делегирует инстанцирование другому объекту.

Prototype – Прототип

Задача: Создать простые экз-ры класса.

Контекст: Создаваем. экз-ры мало отлич-ся друг от друга.

Решение: Описать один экз-р (прототип), а затем вместо созд-ия нов. экз-ра с пом-ю опер-ра new клонировать прототип.

Назначение: Задаёт виды создаваемых объектов с помощью экземпляра-прототипа и создаёт новые объекты путём копирования этого прототипа.

Проще говоря, это паттерн создания объекта через клонирование другого объекта вместо создания через конструктор.

Паттерн используется чтобы:

Ø избежать дополнительных усилий по созданию объекта стандартным путем (имеется в виду использование ключевого слова 'new', когда вызывается конструктор не только самого объекта, но и конструкторы всей иерархии предков объекта), когда это непозволительно дорого для приложения.

Ø избежать наследования создателя объекта (object creator) в клиентском приложении, как это делает паттерн abstract factory.

Ø Используйте этот шаблон проектирования, когда система не должна зависеть от того, как в ней создаются, компонуются и представляются продукты:инстанцируемые классы определяются во время выполнения, например с помощью динамической загрузки;

Ø для того чтобы избежать построения иерархий классов или фабрик, параллельных иерархии классов продуктов;

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

 

 










Последнее изменение этой страницы: 2018-05-31; просмотров: 219.

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