Заместитель (Proxy) или Сурогат (Surrogate)

Содержание

Слайд 2

Что представляет собой паттерн Proxy?

Прокси - паттерн, контролирующий доступ к объектам, предоставляя

Что представляет собой паттерн Proxy? Прокси - паттерн, контролирующий доступ к объектам,
более оптимальное их взаимодействие, перехватывая все вызовы (выполняет функцию контейнера).
Прозрачно замещает объект и управляет доступом к нему. Не изменяет интерфейс или поведение.

Слайд 3

Что представляет собой паттерн Proxy?

Упрощает и оптимизирует работу с объектом. Может добавлять

Что представляет собой паттерн Proxy? Упрощает и оптимизирует работу с объектом. Может
свою функциональность, скрывая ее от клиента.
Содержит объект или ссылку на него, может управлять существованием замещенного объекта.

Слайд 4

Главная идея

Не переписывая, не вмешиваясь в код некой цельной системы обеспечить

Главная идея Не переписывая, не вмешиваясь в код некой цельной системы обеспечить
более оптимальное и экономичное взаимодействие участников этой системы.

Слайд 5

Что дает паттерн Proxy

Выявляются узкие места
Выявляются объекты, функционирование которых проходит не совсем

Что дает паттерн Proxy Выявляются узкие места Выявляются объекты, функционирование которых проходит
оптимально
Вводятся самые объекты заместители , которые, дублируя интерфейс «проблемных» объектов, переадресовывают им вызовы клиента лишь тогда, когда это действительно необходимо, либо после некоторых оптимизационных действий.
В результате, не делая никаких изменений в архитектуре системы, мы получаем немалые возможности по улучшению качества функционирования.

Слайд 6

Когда выгодно использование данного паттерна

работа с объектом не должна зависеть от того,

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

Слайд 7

Виды паттерна Proxy:

удаленный заместитель
(Remote proxy)
виртуальный заместитель
(Virtual proxy)
защищающий

Виды паттерна Proxy: удаленный заместитель (Remote proxy) виртуальный заместитель (Virtual proxy) защищающий
заместитель
(Protection proxy)
"умная" ссылка (Smart reference)

Слайд 8

Удаленный заместитель

Предоставление локального доступа к объекту в другом адресном пространстве или

Удаленный заместитель Предоставление локального доступа к объекту в другом адресном пространстве или
на удалённой машине.
Удаленный заместитель предоставляет локального представителя вместо целевого объекта, находящегося в другом адресном пространстве.

Слайд 9

Виртуальный заместитель

Обеспечивает «ленивую инициализацию»: создание реального субъекта только тогда, когда он действительно

Виртуальный заместитель Обеспечивает «ленивую инициализацию»: создание реального субъекта только тогда, когда он
понадобится. Возможно при этом кешировать часть информации.
Реализация стратегии “копирование-при-записи”.

Слайд 10

Защищающий заместитель

Защищающий заместитель контролирует доступ к исходному объекту. Такие заместители полезны, когда

Защищающий заместитель Защищающий заместитель контролирует доступ к исходному объекту. Такие заместители полезны,
для разных объектов определены различные права доступа. 

Слайд 11

«Умная ссылка»

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

«Умная ссылка» Это замена обычного указателя. Она позволяет выполнить дополнительные действия при
к объекту.
Производит подсчет ссылок, автоматическое освобождение памяти и др.

Слайд 12

Пример использования Proxy

Interface
IMath

double add (x,y)
………………………

class
Math

double add (x,y)
………………………

class
MathProxy

Math math
Double add (x,y){
return math.add(x,y)
}
………………………

Пример использования Proxy Interface IMath double add (x,y) ……………………… class Math double

Слайд 13

public interface IMath {
public double add(double x, double y);
public double

public interface IMath { public double add(double x, double y); public double
sub(double x, double y);
public double mul(double x, double y);
public double div(double x, double y); }
/** * "Real Subject" */
public class Math implements IMath {
public double add(double x, double y)
{ return x + y; }
public double sub(double x, double y)
{ return x - y; }
public double mul(double x, double y)
{ return x * y; }
public double div(double x, double y)
{ return x / y; }}
/** * "Proxy Object" */
public class MathProxy implements IMath {
private Math math;
public MathProxy()
{ math = new Math(); }
public double add(double x, double y)
{ return math.add(x, y); }
public double sub(double x, double y)
{ return math.sub(x, y); }
public double mul(double x, double y)
{ return math.mul(x, y); }
public double div(double x, double y)
{ return math.div(x, y); }
}

Слайд 14

public class Main {
public static void main(String[] args) {
// Create

public class Main { public static void main(String[] args) { // Create
math proxy
IMath p = new MathProxy();
// Do the math
System.out.println("4 + 2 = " + p.add(4, 2));
System.out.println("4 - 2 = " + p.sub(4, 2));
System.out.println("4 * 2 = " + p.mul(4, 2));
System.out.println("4 / 2 = " + p.div(4, 2));
}
}

Слайд 15

Преимущества и недостатки

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

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

Слайд 16

Вопросы
Что представляет собой паттерн Proxy?
а) паттерн, который предоставляет необходимые функции, но

Вопросы Что представляет собой паттерн Proxy? а) паттерн, который предоставляет необходимые функции,
не поддерживает нужного интерфейса
б) разделитель объектов на абстракцию и реализацию так, чтобы они могли изменяться независимо друг от друга
в) паттерн, контролирующий доступ к объектам, перехватывая все вызовы.
Назовите виды прокси.