设计模式之:代理模式

业务场景

(1)懒加载:hibernate、mybatis,都可以实现懒加载,其实也是基于动态代理思想实现的,对刚查询出来的对象做一个代理。然后去调用getX()方法的时候,再实际执行sql查询出来关联的数据。

通过hibernate / mybatis,查询出来这个classroom的时候,是没有级联将students数据从数据库里查出来的。接下来,如果你要从classroom中获取students集合来使用的时候,你会去调用getStudents()。

懒加载的原理,其实就是基于代理模式去做的,刚从数据库中查询出来的是classroom的一个代理对象

(2)远程调用:比如 thrift 等 rpc 调用包,都是在本地做一个远程服务的本地代理接口,然后对本地代理接口来调用,然后代理对象发送网络请求调用远程服务的接口

系统要调用另外的一个系统的接口,要走网络请求,远程调用,http接口;rpc,系统在本地就是调用一个代理类的接口,代理类在接口的代理实现中,是会发送网络请求跟远程的系统通信,调用对方的接口

spring cloud,dubbo,分布式系统的架构,分布式系统之间互相的调用,就是大量的用了代理模式,代理接口,代理了远程系统的接口

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 {
        @Override
        public void request() {
            System.out.println("执行请求");
        }

    }

    public static class Proxy implements Subject {

        private Subject subject;

        public Proxy(Subject subject) {
            this.subject = subject;
        }

        @Override
        public void request() {
            System.out.println("执行额外的条件判断,拷贝是否要调用subject的request()方法");
            boolean invoke = true;
            if (invoke) {
                subject.request();
            }
        }

    }

}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值