Почему прокси реализует субъектный интерфейс в шаблоне прокси

Я просматривал шаблон прокси и заметил, что класс прокси также реализует интерфейс Subject, который реализован конкретными реализациями или классами Subject.

Может ли кто-нибудь указать причину, почему нам нужно это сделать?

Мы могли бы создать функцию в прокси-классе и вызывать методы subject внутри этой функции. Затем клиентский код может вызвать эту функцию прокси-класса, и могут быть вызваны соответствующие методы.


person Tech Jay    schedule 17.11.2013    source источник


Ответы (2)


Следование тому, как вы предложили, будет иметь тот же результат, но я бы не назвал его прокси, я бы назвал его оболочкой. Использование шаблона проектирования прокси с интерфейсом было бы предпочтительнее IMHO, потому что клиент может быть независим от того, какой класс фактически используется для выполнения соответствующей функции. Клиент будет видеть только интерфейсный класс subject и ничего не знать о конкретных классах Proxy или RealSubject. Это было бы важно для долгосрочного обслуживания кода.

Конечно, шаблон проектирования не является чем-то строгим, которому вы должны следовать, чтобы быть «правильным». Это руководство для общих сценариев разработки программного обеспечения. Поэтому реализовывать его следует так, как вам наиболее удобно.

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

person Pantelis Natsiavas    schedule 17.11.2013

На первый взгляд, прокси должен вести себя так, как будто это реальный объект, который вы запрашиваете. Вы не сможете определить, используете ли вы прокси-объект или реальный объект, который скрыт прокси-сервером. Вот почему прокси реализует класс Subject.

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

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

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

person Ondrej Janacek    schedule 17.11.2013
comment
Да, кажется, что шаблон должен быть реализован так, как он предназначен, и убедиться, что прокси точно имитирует клиента. Другой причины так и не нашел. - person Tech Jay; 18.11.2013