代理模式(Proxy)
2020-07-23 本文已影响0人
秀儿2020
定义
为其他对象提供一种代理,以控制对这个对象的访问。
本质
控制对象访问。
登场角色
-
Subject(主体)
目标接口,定义代理和具体目标对象的接口,这样就可以在任何使用具体目标对象的地方使用代理对象。
-
Proxy(代理人)
代理对象,通常实现如下功能,实现与具体目标对象一样的接口,这样就可以使用代理来代替具体的目标对象,保存一个指向具体目标对象的引用,可以在需要的时候调用具体的目标对象。
-
RealSubject(实际的主体)
具体的目标对象,真正实现目标接口要求的功能。
-
Client(请求者)
-
使用代理模式的角色。
示例代码
/**
* 抽象主体
*/
public interface ILawsuiit {
public void submit(); //提交申请
public void burden();//进行举证
public void defend();//开始辩护
public void finish();//诉讼完成
}
/**
* 具体的主体
*/
public class XiaoMing implements ILawsuiit{
@Override
public void submit() {
System.out.println("老板拖欠工资。");
}
@Override
public void burden() {
System.out.println("这是合同书和过去一年的工资流水。");
}
@Override
public void defend() {
System.out.println("证据确凿,不需要再说什么了。");
}
@Override
public void finish() {
System.out.println("诉讼成功。");
}
}
/**
* 代理人
*/
public class Laywer implements ILawsuiit{
private ILawsuiit lawsuiit;
public Laywer(ILawsuiit lawsuiit) {
this.lawsuiit = lawsuiit;
}
@Override
public void submit() {
lawsuiit.submit();
}
@Override
public void burden() {
lawsuiit.burden();
}
@Override
public void defend() {
lawsuiit.defend();
}
@Override
public void finish() {
lawsuiit.finish();
}
}
public class Client {
public static void main(String[] args){
//构造一个小明
ILawsuiit xiaoming = new XiaoMing();
//构造一个代理律师
ILawsuiit lawer = new Laywer(xiaoming);
//律师提出诉讼申请
lawer.submit();
//律师进行举证
lawer.burden();
//律师代替小明进行辩护
lawer.defend();
//律师完成诉讼
lawer.finish();
}
}
运行结果
老板拖欠工资。
这是合同书和过去一年的工资流水。
证据确凿,不需要再说什么了。
诉讼成功。
功能
代理模式是通过创建一个代理对象,用这个代理对象去代表真实的对象,客户端得到这个代理对象后,对客户端并没有什么影响,就跟得到了真是对象一样来使用。
当客户端操作这个代理对象的时候,实际上功能最终还是会由真实的对象来完成,只不过是通过代理操作的,也就是客户端操作代理,代理操作真正的对象。