Найти тему

Паттерн "Прокси"

Оглавление

Паттерн Прокси (структурный паттерн) может быть полезен, когда нам нужно управлять доступом к котику объекту, добавлять дополнительную логику при доступе к нему или делать отложенную инициализацию объекта (в котлин есть by lazy).

Предположим, у нас есть класс котика, который умеет мяукать.

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

Мы можем создать прокси-класс CatProxy, который будет добавлять дополнительную логику. Тут же можно контролировать доступ к котику. Например, мяукать, только если пользователь авторизован и является хозяином котика.

-2

Теперь мы можем использовать нашу прокси-версию котика:

-3

Вот что получим при запуске кода:

-4

CatProxy контролирует доступ к реальному объекту Cat и может выполнять дополнительные действия до и после вызова метода meow().

Плюсы паттерна:

  1. Контроль доступа: прокси позволяет контролировать доступ к объекту. Мы можем решать, кто и как будет получать доступ к котику и можем добавлять любые проверки, не трогая и не меняя класс кота.
  2. Ленивая инициализация: прокси может отложить создание или инициализацию объекта до момента его реального использования. В котлин есть by lazy, но паттерн всё равно может быть полезен. Например, мы можем что-то логировать здесь и совместить с другими плюсами.
  3. Кеширование: прокси может кешировать результаты, уменьшая нагрузку на ресурсы и улучшая производительность. Это полезно для повторного использования.
  4. Управление ресурсами: прокси может использоваться для управления ресурсами, такими как файлы, сетевые соединения и базы данных. Он может освобождать ресурсы после завершения работы.

Минусы паттерна Прокси:

  1. Усложнение кода: использование прокси может усложнить структуру кода (как и любые другие паттерны).
  2. Дополнительные затраты на память: прокси может потреблять дополнительную память из-за создания дополнительных объектов. Этот пункт тоже можно добавить к любому паттерну. Я считаю, что на современных устройствах это даже не считается за минус, но всё равно добавлю как минус.

Несколько идей, где можно использовать прокси:

  1. Авторизация и аутентификация: прокси может быть использован для управления авторизацией и аутентификацией пользователей. Например, если у нас есть приложение с платным контентом, то прокси как раз может проверять права перед предоставлением доступа.
  2. Кеширование данных: например, если у нас есть приложение новостей, мы можем создать прокси для запросов к серверу новостей и кешировать полученные данные.
  3. Логирование: прокси может использоваться для добавления логирования без изменения основного кода.
  4. Защита ресурсов: можно создать прокси для доступа к файловой системе и добавить проверку разрешений на чтение или запись файлов.
  5. Оптимизация сетевых запросов: прокси может кэшировать сетевые запросы и возвращать сохраненные результаты, если сетевой запрос с теми же параметрами уже выполнялся ранее.
-5

Дубль статей в телеграмме — https://t.me/android_junior

Мои заметки в телеграмме — https://t.me/android_junior_notes

P.S. сделано с помощью ChatGPT и Midjourney. :)