场景 (1)懒加载:hibernate、mybatis,都可以实现懒加载,这个大家应该都知道了,其实也是基于动态代理思想实现的,对刚查询出来的对象做一个代理。然后去调用getX()方法的时候,再实际执行sql查询出来关联的数据。 (2)远程调用:比如thrift等rpc调用包,都是在本地做一个远程服务的本地代理接口,然后对本地代理接口来调用,然后代理对象发送网络请求调用远程服务的接口
1.代理模式
package com.example.demo.pattern.proxy;/*** @author chenchao* @date 2021/11/9*/public class ProxyPatternDemo {public static void main(String[] args) {Subject subject = new ConcreteSubject();Subject proxy = new Proxy(subject);proxy.request();}public interface Subject {void request();}public static class ConcreteSubject implements Subject {@Overridepublic void request() {System.out.println("执行请求");}}public static class Proxy implements Subject {private Subject subject;public Proxy(Subject subject) {this.subject = subject;}@Overridepublic void request() {System.out.println("执行额外的条件判断,拷贝是否要调用subject的request()方法");boolean invoke = true;if(invoke) {subject.request();}}}}
2.说明
代理模式就是在原有的基础上加一些额外操作
