代理之-静态代理

  • 抽象主题角色(Subject)

    声明真实主题角色与抽象主题角色的公共接口方法,可以是接口或抽象类

  • 真实主题角色(RealSubject)

    被代理类,定义代理类所表示的真实对象,执行系统真正的业务逻辑

  • 代理主题角色(Proxy)

    代理类,内部持有RealSubject的引用,具备完全对RealSubject的代理权,客户端调用代理对象的方法,同时也调用被代理对象的方法,但会在代理对象前后加一层处理逻辑

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();
    }
}

类图如下

猜你喜欢

转载自blog.csdn.net/qq_36336332/article/details/108428560