在总结完5种创建型模式之后,接下来开始总结结构型模式,而这篇文章就是总结第一种结构型模式,代理模式
定义
当我们在日常的开发过程中,由于某些原因需要给一个目标访问类提供一个中间类,来作为访问控制,作为访问目标类的媒介,这样的中间类称之为代理,代理可以对目标类起到一定的访问控制作用和保护作用,我们常见的代理模式框架就有Retrofit,其本质就是okhttp的代理类。
结构
- 抽象主题:也就是真正需要执行的业务逻辑代码
- 真实的主题类:我们所真正访问的目标类中的业务逻辑方法
- 代理类:实现控制访问和更多的业务逻辑控制
示例
public class MyTest{
public static void main(String[] args) throws CloneNotSupportedException {
Proxy proxy = new Proxy();
proxy.method();
}
/**
* 定义所需要访问的主题接口
*/
interface Subject{
void method();
}
/**
* 定义真实的目标类
*/
static class RealClass implements Subject{
//真实目标类的访问方法
@Override
public void method() {
System.out.println("访问到了真实的目标类的目标方法...");
}
}
/**
* 定义代理类
*/
static class Proxy implements Subject{
private RealClass realClass ;
//开始执行代理类的方法
@Override
public void method() {
System.out.println("开始访问代理类的方法...");
if (realClass == null){
realClass = new RealClass();
}
preMethod();
realClass.method();
postMethod();
}
}
private static void preMethod(){
System.out.println("访问真实类之前执行的操作...");
}
private static void postMethod(){
System.out.println("访问真实类完成之后的操作...");
}
}
其执行结果为
开始访问代理类的方法...
访问真实类之前执行的操作...
访问到了真实的目标类的目标方法...
访问真实类完成之后的操作...
我们可以看出我们在使用真正的目标类RealClass时,并没有直接访问其method()方法,而是通过一个代理类Proxy来实现的,并且实现了在访问目标之前和之后去执行相应的操作,我们可以通过这种方式来对访问真实目标类加以控制,以实现更多的需求。
优缺点
- 优点 :可以对真实的访问类起到保护作用
- 缺点 :当我们需要新增加一个访问主题时,真实类和代理类都需要做对应的代码添加,比较麻烦。其次是代理模式所实现的方法,它必须要在真实目标类里存在,即代理类对真实类的依赖度过高,不易单独更改实现新的代理功能。
今天的代理模式就给大家总结到这里啦,觉得有帮助记得点个赞~
网友评论