моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Шаблон прокси — это структурный шаблон проектирования, который контролирует доступ к другому объекту путем введения прокси-объекта. Этот прокси-объект может предоставлять дополнительные функции прокси-объекту, такие как управление доступом, отложенная инициализация, ведение журнала или доступ к сети.
удаленный агент:
виртуальный агент:
агент защиты:
Умное руководство:
Ниже приведен простой пример реализации шаблона прокси, показывающий, как контролировать доступ к реальному объекту через прокси-объект.
public interface Subject {
void request();
}
Subject
Интерфейс определяетrequest
Метод. Это метод, который должен реализовать как реальный объект, так и прокси-объект.public class RealSubject implements Subject {
public void request() {
System.out.println("RealSubject: Handling request.");
}
}
RealSubject
класс реализованSubject
Интерфейсrequest
Метод, представляющий класс, который фактически обрабатывает запрос.public class Proxy implements Subject {
private RealSubject realSubject;
public Proxy(RealSubject realSubject) {
this.realSubject = realSubject;
}
public void request() {
if (this.checkAccess()) {
this.realSubject.request();
this.logAccess();
}
}
private boolean checkAccess() {
// 检查访问权限
System.out.println("Proxy: Checking access prior to firing a real request.");
return true;
}
private void logAccess() {
// 记录请求日志
System.out.println("Proxy: Logging the time of request.");
}
}
Proxy
класс реализованSubject
интерфейс и содержитRealSubject
объект.request
В этом методе прокси-класс сначала проверяет права доступа, а затем вызывает метод реального объекта.request
метод и, наконец, запишите журнал запросов.public class Client {
public static void main(String[] args) {
RealSubject realSubject = new RealSubject();
Proxy proxy = new Proxy(realSubject);
proxy.request();
}
}
Client
класс созданRealSubject
иProxy
объект, черезProxy
Вызов объектаrequest
метод управленияRealSubject
Доступ.Изоляция:
безопасность:
Масштабируемость:
Разумный:
сложность кода:
Время отклика:
Сложность дизайна:
Client
|
v
Subject <---- Proxy <---- RealSubject
Шаблон прокси обеспечивает эффективный способ контроля и управления доступом к объектам. Используя прокси, вы можете добавлять различные функции, сохраняя при этом четкость ответственности бизнес-объектов. Этот режим особенно подходит для сценариев, требующих контроля доступа и других операций предварительной обработки бизнес-объектов.
Шаблон фасада — это шаблон структурного проектирования, который упрощает использование сложных подсистем, предоставляя унифицированный интерфейс для доступа к группе интерфейсов в подсистеме. Шаблон фасада определяет высокоуровневый интерфейс, который упрощает использование этой подсистемы.
Упрощение интерфейсов к сложным системам:
Иерархия:
Разделенная система:
Ниже приведен простой пример реализации шаблона «Фасад», показывающий, как упростить использование подсистем с помощью классов фасада.
public class SubsystemA {
public void operationA() {
System.out.println("SubsystemA: operationA");
}
}
public class SubsystemB {
public void operationB() {
System.out.println("SubsystemB: operationB");
}
}
public class SubsystemC {
public void operationC() {
System.out.println("SubsystemC: operationC");
}
}
public class Facade {
private SubsystemA subsystemA;
private SubsystemB subsystemB;
private SubsystemC subsystemC;
public Facade() {
this.subsystemA = new SubsystemA();
this.subsystemB = new SubsystemB();
this.subsystemC = new SubsystemC();
}
public void operation1() {
System.out.println("Facade: operation1");
subsystemA.operationA();
subsystemB.operationB();
}
public void operation2() {
System.out.println("Facade: operation2");
subsystemB.operationB();
subsystemC.operationC();
}
}
public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.operation1();
facade.operation2();
}
}
Класс подсистемы:
SubsystemA
, SubsystemB
, и SubsystemC
Это конкретный класс реализации подсистемы, и каждый класс имеет свой уникальный метод работы.Класс внешнего вида:
Facade
Классы содержат объекты подсистемы и предоставляют упрощенные интерфейсы.operation1
иoperation2
для вызова функций подсистемы.клиентский код:
Client
урок пройденFacade
класс для звонкаoperation1
иoperation2
, что упрощает использование сложных подсистем.Упрощенный интерфейс:
Слабая связь:
лучшее наслоение:
Не соответствует принципу открытия-закрытия:
Может вызвать проблемы с производительностью:
Client
|
v
Facade ----> SubsystemA
----> SubsystemB
----> SubsystemC
Шаблон «Фасад» упрощает работу со сложными подсистемами, предоставляя упрощенный интерфейс. Он подходит для сценариев, где необходимо упростить интерфейс подсистемы, сократить прямое взаимодействие между клиентом и подсистемой и отделить иерархию системы. Хотя он потенциально может нарушить принцип «открыто-закрыто», в большинстве случаев его преимущества намного перевешивают недостатки, что делает проектирование системы более понятным и простым в обслуживании.