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