Java程序优化之代理模式

152 阅读2分钟

使用代理对象完成用户请求,避免用户直接访问真实对象。假设客户端软件有需要查询数据库的功能,但是在打开该软件,需要初始化所有类,在不使用的时候不需要加载连接数据库的类,或者其他的类,但是初始化类使得系统变得缓慢,所以当系统启用时先出实话代理类,代理类什么都不做,当需要连接数据库的时候再进行连接,可以加快系统启动时间,减少用户等待时间。

两个特点:

1·安全:屏蔽用户直接对真实对象的访问。

2·提升系统性能:对真实对象进行封装,达到延时加载目的。

代理模式的实现和使用:

//主题接口类

public interface IDBQuery{

    String request();

}

//创建真实类

public class DBQuery implements IDBQuery{

    public DBQuery(){

        try{

            Thread.sleep(1000);

            //此处可能有连接数据库等耗时操作

        }catch (InterruptedException e){

            e.printStackTrace();

        }

    }

    public String request(){

        return "request String";

    }

}

//代理类

public calss DBQueryProxy implements IDBQuery{

    private DBQuery real = null;

    public String request(){

    if (real == null) {

        real = new DBQuery();

    }

    return real.request();

    }

}

//主类调用

public static void main(String[] args) {

    IDBQuery q = new DBQueryProxy();

    q.request();

}

由于动态代理类在程序运行时,通过反射机制动态生成,动态代理类通常代理接口下的所有类,动态代理事先不知道要代理的是什么,只有在运行的时候才能确定。