java代理模式浅识

      代理模式是一种非常常用的设计模式,典型的比如,springAOP实现,hibernate的延迟加载.它的基本思想是:创建代理对象完成用户请求,屏蔽用户对真实对象的访问.这样一个很明显的意图是安全性的考虑.还有些场景比如:提高性能,将真实对象进行封装,从而达到延迟加载的目的. 下面我们通过一个事例来看看它是怎么来达到延迟加载,从而提高系统性能.

       延迟加载的核心思想是;如果当前没有使用这个组件,我们就不需要去立即加载初始化它.而是等到需要的时候才真正的区加载.比如典型的查询功能.在查询时我们需要获得连接,在软件开启的时候,需要初始化很多的类,或得连接,这样的操作多了,会使得系统的速度变得缓慢.因此我们可以设计代理类,封装对数据查询的初始化操作,当系统启动时,初始化这个代理类,而非真实的数据库查询类,而代理类什么都没做,所以它的构造是相当迅速的.

         类设计如下:java代理模式浅识_第1张图片

 

               其中DBQuery'是被代理的类,DBQueryProxy是代理类,它们通过IDBQuery接口进行规范.具体代码设计如下:

IDBQuery:

    package design;

     public interface IDBQuery {
       public String request();
         }

 

DBQuery:

package design;

public class DBQuery implements IDBQuery{
 public  DBQuery() {
 try {
  Thread.sleep(4000);
 } catch (InterruptedException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
}
 @Override
 public String request() {
  // TODO Auto-generated method stub
  System.out.println("数据查询操作");
  return "real";
 }

}

DBQueryProxy:

package design;

public class DBQueryProxy implements IDBQuery{
   private DBQuery dbQuery;
 public  DBQueryProxy() {
  System.out.println("代理初始");
 }
 @Override
 public String request() {
  // TODO Auto-generated method stub
  if (dbQuery==null) {
   dbQuery=new DBQuery();  //需要时才去创建,
  }
  return dbQuery.request();
 }

}

测试DBQueryMain:

package design;

public class DBQueryMain {
public static void main(String[] args) {
 DBQueryProxy dbQuery=new DBQueryProxy();
 dbQuery.request();
}

}

 

打印:

代理初始
数据查询操作

  

 

 

你可能感兴趣的:(设计模式)