代理模式
定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。
何时使用:
想在访问一个类时做一些控制。
作用:
- 中介隔离作用
- 开闭原则,增加功能(扩展中介功能)
代理模式分类:
- 静态代理
- 动态代理(JDK动态代理、CGLIB动态代理),不在此介绍
静态代理优劣:
- 优点:
- 高扩展性
- 缺点:
- 增加代理对象可能会造成请求处理速度变慢
- 每一个服务都创建一个代理类,工作量大,接口改变时,代理类也得相应调整
示意图:
示例:
package test.proxy;
public interface Image {
public void show();
}
package test.proxy;
public class RealImage implements Image {
@Override
public void show() {
System.out.println("展示图片");
}
}
package test.proxy;
public class ProxyImage implements Image {
RealImage real = new RealImage();
@Override
public void show() {
before();
real.show();
after();
}
// 扩展功能1
private void before() {
System.out.println("调用show()之前执行");
}
// 扩展功能2
private void after() {
System.out.println("调用show()之后执行");
}
}
package test.proxy;
public class Test {
public static void main(String[] args) {
Image image = new ProxyImage();
image.show();
}
}
执行结果:
调用show()之前执行
展示图片
调用show()之后执行