目录
1、介绍
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。
2、优缺点
优点:
- 职责清晰:真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
- 代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
- 高扩展性
缺点:
- 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢
- 实现代理模式需要额外的工作,有些代理模式的实现非常复杂
3、主要角色
- 抽象角色:通过接口或抽象类声明真实角色实现的业务方法
- 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用
- 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作
4、代码演示
//1、抽象角色
package com.wmj.sjms01;
public interface Image {
void display();
}
//2、真实角色
public class RealImage implements Image {
@Override
public void display() {
System.out.println("真实对象的业务");
}
}
//3、代理角色
public class ProxyImage implements Image {
private Image image = new RealImage();
@Override
public void display() {
System.out.println("业务前准备工作");
image.display();
System.out.println("业务后扫尾工作");
}
}
//4、测试
public static void main(String[] args) {
Image image = new ProxyImage();
image.display();
}
执行结果:
业务前准备工作
真实对象的业务
业务后扫尾工作
5、其他
看到过一个比喻,觉得很贴切,能帮助理解代理类:猪八戒去找高翠兰结果是孙悟空变的,可以这样理解:把高翠兰的外貌抽象出来,高翠兰本人和孙悟空都实现了这个接口,猪八戒访问高翠兰的时候看不出来这个是孙悟空,所以说孙悟空是高翠兰代理类