设计模式-静态代理模式

定义:

使用代理对象完成用户请求,屏蔽用户对真实对象的访问

应用场景:

  1. 因为安全原因,需要屏蔽客户端直接访问真实对象
  2. 远程调用时,需要使用代理类处理远程方法调用的技术细节
  3. 为了提升系统性能,对真实对象进行封装,从而达到延迟加载的目的

结构:

角色 作用
接口类 定义代理类和真实业务类的公共对外方法
真实业务类 真正实现业务逻辑的类
代理类 用来代理和封装【真实业务类】
客户端 使用代理类完成业务

案例:(延迟加载)

接口类:

public interface QueryInterface {
    void outStr();
}

真实业务类:

public class QueryImp implements QueryInterface{
    public QueryImp() {
        try{
        //重量级对象
            Thread.sleep(3000);
            System.out.println("处理业务逻辑");
        }catch (Exception e){
            e.printStackTrace();
        }

    }
    @Override
    public void outStr() {
        System.out.println("输出方法:aaa");
    }
}

代理类:

public class QueryImpProxy implements QueryInterface {
    //轻量级对象
    private static class GetQueryImp{
        //在真正需要的时候才创建真实对象,因为创建真实对象的时候会有业务逻辑,耗时较长
        private static QueryImp queryImp=new QueryImp();
    };
    @Override
    public void outStr() {
        GetQueryImp.queryImp.outStr();
    }
}

客户端:

public class TestApp {
    public static void main(String[] args){
        System.out.println("开始(使用代理):"+ DateUtils.getCurrDateTime());
        QueryInterface inter=new QueryImpProxy();//使用代理

//        inter.outStr();//真正使用的时候才创建真实对象
        System.out.println("结束(使用代理):"+ DateUtils.getCurrDateTime());
        System.out.println("开始(未使用代理):"+ DateUtils.getCurrDateTime());
        QueryInterface inter1=new QueryImp();//未使用代理,在此直接创建真实对象
//        inter1.outStr();
        System.out.println("结束(未使用代理):"+ DateUtils.getCurrDateTime());
    }
}

客户端执行结果:

在这里插入图片描述

总结:

在使用代理模式实现延迟加载时,可以有效提升系统运行速度,改善用户体验

猜你喜欢

转载自blog.csdn.net/qq_28500837/article/details/104946441