Modo de agente de patrón de diseño 6

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?

"
  1. 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.

  2. 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.

  3. 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

 

Supongo que te gusta

Origin blog.csdn.net/wujialv/article/details/109020806
Recomendado
Clasificación