En cuanto al modelo de agencia, es fácil de entender. Por ejemplo, si compras una entrada para un concierto, es difícil comprarla tú mismo, solo puedes ir al revendedor, el revendedor es el agente (no oficial) que vende los boletos de tren.
En desarrollo, el modelo proxy es muy común. Los objetos de una clase no se generan directamente y los objetos se generan a través de clases proxy. Entonces se puede mejorar la función del objeto generado por el proxy. Generalmente, si queremos mejorar la función de un objeto, podemos usar el modo proxy.
Que es el modelo proxy
"Proporcione un sustituto o marcador de posición para otro objeto para controlar el acceso a él (proporcione un proxy para otros objetos para controlar el acceso a este objeto).
"
Creo que el modelo de proxy tiene varias funciones útiles:
""
Puede proteger el objeto de destino, no accedemos directamente al objeto de destino, sino a través del objeto proxy
El objeto proxy puede ampliar la funcionalidad del objeto de destino
El cliente no puede acceder directamente al objeto de destino, pero solo puede acceder a él a través del objeto proxy, lo que inevitablemente reducirá la velocidad de acceso. Al mismo tiempo, se agregan objetos proxy y también aumenta la complejidad del sistema.
Entonces, ¿cuáles son los elementos del modelo de agencia?
""
Clase de sujeto abstracto (Subject): Declare métodos de negocio implementados por sujetos reales y objetos proxy a través de interfaces o clases abstractas.
Clase Real Subject: Implementa el negocio concreto en el sujeto abstracto, es el objeto real representado por el objeto proxy y el objeto al que eventualmente se hace referencia.
Clase Proxy: Proporciona la misma interfaz que el tema real. Contiene referencias al tema real. Puede acceder, controlar o ampliar las funciones del tema real.
La relación entre estos elementos es la siguiente:
Modelo de agencia
Código
Aquí está el código:
Tema
public interface Subject {
void request();
}
Apoderado
public class Proxy implements Subject {
private RealSubject realSubject;
@Override
public void request() {
if (realSubject == null) {
realSubject = new RealSubject();
}
preRequest();
realSubject.request();
postRequest();
}
public void preRequest() {
System.out.println("访问真实主题之前的预处理!!!");
}
public void postRequest() {
System.out.println("访问真实主题之后的后续处理!!!");
}
}
RealSubject
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("真实类访问方法!!!!");
}
}
La prueba es la siguiente:
public class ProxyTest {
public static void main(String[] args){
Proxy proxy = new Proxy();
proxy.request();
}
}
访问真实主题之前的预处理!!!
真实类访问方法!!!!
访问真实主题之后的后续处理!!!
Acerca de los agentes dinámicos
Para aplicaciones más avanzadas del modo proxy, consulte este artículo mío:
El agente dinámico al que debes preguntar en las entrevistas