代理之-静态代理
原创
©著作权归作者所有:来自51CTO博客作者wx5925899fdb5f1的原创作品,请联系作者获取转载授权,否则将追究法律责任
- 抽象主题角色(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();
}
}
类图如下
