🕵️
Введение в паттерны
  • Введение в паттерны
  • Паттерны
    • Оглавление
    • Порождающие паттерны
      • Фабричный метод
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Абстрактная фабрика
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Прототип
        • Реализации на С++
        • Реализации на Kotlin
        • Реализации на Java
        • Возможные реализации для решения конкретных задач на С++
      • Строитель
        • Реализации на С++
        • Реализации на Kotlin
      • Одиночка
        • Реализации на C++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Пул объектов
        • Реализации на С++
    • Структурные паттерны
      • Адаптер
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач
      • Декоратор
        • Реализации на С++
        • Реализации на Kotlin
      • Компоновщик
        • Реализации на С++
      • Мост
        • Реализации на С++
      • Заместитель
        • Реализации на С++
        • Реализации на Kotlin
      • Фасад
        • Реализации на С++
      • Приспособленец
        • Реализации на С++
    • Поведенческие паттерны
      • Стратегия
        • Реализации на С++
        • Реализации на Kotlin
      • Команда
        • Реализации на С++
        • Реализации на Kotlin
      • Цепочка обязанностей
        • Реализации на С++
        • Реализации на Kotlin
      • Подписчик-издатель
        • Реализации на С++
        • Реализации на Kotlin
      • Посетитель
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
      • Посредник
        • Реализации на С++
        • Реализации на Kotlin
      • Шаблонный метод
        • Реализации на С++
      • Опекун
        • Реализации на С++
      • Итератор
        • Реализации на С++
        • Реализации на Kotlin
      • Свойство
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
  • Введение в идиомы
  • Идиомы
    • Оглавление
    • RAII
    • Type erasure
      • Контейнеры с type erasure
    • CRTP
    • Статический полиморфизм
    • Shrink to fit
    • Proxy
    • Erase remove
    • Decltype (auto)
    • Copy and swap
    • Safe bool
    • Scope guard
    • Addressof
Powered by GitBook
On this page
  • Назначение
  • Решаемые задачи
  • UML диаграмма
  • Преимущества
  • Недостатки
  • Связь с другими паттернами

Was this helpful?

  1. Паттерны
  2. Структурные паттерны

Заместитель

Proxy

PreviousРеализации на С++NextРеализации на С++

Last updated 1 year ago

Was this helpful?

Назначение

Паттерн проектирования заместитель (Proxy) имитирует интерфейс и поведение оригинального объекта и контролирует доступ к нему.

Заместитель обычно создается для того, чтобы предоставить дополнительные функции или управлять доступом к оригинальному объекту без изменения его основной логики или структуры.

Назначение паттерна заместитель заключается в добавлении дополнительного уровня абстракции между клиентом и реальным объектом.

Решаемые задачи

  • предоставление локального объекта, который работает с удаленным объектом, скрывая детали удаленного взаимодействия [удаленный заместитель (Remote Proxy)]

  • создание заглушки для ресурсоемкого объекта, позволяющей откладывать его создание или загрузку до момента реального использования [виртуальный прокси (Virtual Proxy)]

  • контроль доступа к объекту, ограничение различных операций в зависимости от прав доступа [защищающий заместитель (Protection Proxy)]

  • выполнение дополнительных действий при доступе к объекту, например, подсчет ссылок на объект или отслеживание изменений ["умная" ссылка (Smart Reference)]

  • кэширование результатов операций объекта для избегания повторных вычислений или загрузки [кэширующий заместитель (Caching Proxy)]

UML диаграмма

Преимущества

  • контроль доступа к объекту

Позволяет реализовать механизмы безопасности, аутентификации и авторизации в системе.

  • возможность работы при отсутствии самого объекта

В этом случае поведение заместителя может быть неоднозначным. Необходимо предупреждение о возможной недостоверности ответа

  • упрощение работы с ресурсоемкими объектами, "разгрузка" тяжелого оригинального объекта

  • добавление дополнительного функционала перед или после обращения к оригинальному объекту

  • возможность отвечать за жизненный цикл объекта

  • кэширование: возможность хранить результаты операций и предоставлять их повторно без обращения к оригинальному объекту

Недостатки

  • увеличение накладных расходов: увеличение времени выполнения операций

  • усложнение кода: необходимость в добавлении дополнительных классов и методов

Связь с другими паттернами

Интерфейс заместителя может быть и подмножеством интерфейса субъекта.

: предоставляет другой интерфейс к адаптируемому объекту. Напротив, заместитель в точности повторяет интерфейс своего субъекта.

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

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

: заместитель может быть реализован как одиночка, гарантируя, что будет создан только один объект заместителя для доступа к оригинальному объекту

: заместитель может использоваться для введения различных стратегий доступа к объекту.

Адаптер
Декоратор
Фабричный метод
Одиночка
Стратегия
UML диаграмма паттерна "Заместитель"