Proxy estático

  • Rol del sujeto abstracto (sujeto)

    El método de interfaz pública que declara la función del tema real y la función del tema abstracto, que puede ser una interfaz o una clase abstracta.

  • Rol del sujeto real (RealSubject)

    La clase de proxy define el objeto real representado por la clase de proxy y ejecuta la lógica empresarial real del sistema.

  • Rol de tema de proxy (Proxy)

    La clase de proxy, que contiene una referencia a RealSubject internamente, tiene derechos de proxy completos para RealSubject. El cliente llama al método del objeto proxy y también llama al método del objeto proxy, pero agregará una capa de lógica de procesamiento antes y después. el objeto proxy

Subject.java

package proxy.general;

/**
 * 抽象主题角色(Subject)
 * 声明真实主题角色与抽象主题角色的公共接口方法,可以是接口或抽象类
 */
public interface ISubject {
    void request();
}

RealSubject.java

package proxy.general;

/**
 * 真实主题角色(RealSubject)
 * 被代理类,定义代理类所表示的真实对象,执行系统真正的业务逻辑
 */
public class RealSubject implements ISubject {

    public void request() {
        System.out.println("real service is called.");
    }

}

Proxy.java

package proxy.general;

/**
 * 代理主题角色(Proxy)
 * 代理类,内部持有RealSubject的引用,
 * 具备完全对RealSubject的代理权,
 * 客户端调用代理对象的方法,
 * 同时也调用被代理对象的方法,
 * 但会在代理对象前后加一层处理逻辑。
 */
public class Proxy implements ISubject {

    private ISubject subject;

    public Proxy(ISubject subject){
        this.subject = subject;
    }

    @Override
    public void request() {
        before();
        subject.request();
        after();
    }

    public void before(){
        System.out.println("called before request().");
    }

    public void after(){
        System.out.println("called after request().");
    }
}
Client.java
package proxy.general;

/**
 * 客户端调用类
 */
public class Client {

    public static void main(String[] args) {
        new Proxy(new RealSubject()).request();
    }
}

El diagrama de clases es el siguiente

Supongo que te gusta

Origin blog.csdn.net/qq_36336332/article/details/108428560
Recomendado
Clasificación