接口常用设计模式

适配器模式:
在日常生活中,会经常遇到一些适配器,例如笔记本电脑的变压器,究竟是电影的电源适配器。
比如说:电脑笔记本电脑只接受15V的电压,因此不能和直接220V的电源插座连接,电源适配器能够把220V的电压转换为15v,它是链接笔记本电脑何普通电源的桥梁。
在面向对象的领域,也采用适配器模式来进行接口的转换
适配器模式有两种方式:
1  继承实现方式
   SourceFC 和 targetFC 分别代表源接口和目标接口,在SourceFC 接口只有add(int a,int b) 方法。而目标接口中有add(int a,int b) 和addONE(int a) 方法。

  
         public class SourceImpl implements SourceFC {
            public  int add(int a ,int b) {
              return a+ b; 
            } 
         }        
   

 

public class TargetIMpl extends SourceImpl implements TargetFC {
     public int addONE (Int a) {
       return add(a,1);
     }
 }


(2) 组合实现方式

public class TargetImpl implements TargetFC {
   private SourceFC source;
   public TargetImpl(SourceFC source) {
      this.source = source ;
   }
   public int add(int a,int b) {
   return  source.add(a,b); 
  }
  public int addOne(int a) {
    return source.add(a,1);
  }
}


hibernate 提供了连接池的实现类DriverManagerConnectionProvider,这是hibernate默认的数据库连接池,此外hibernate还可以使用第三方提供的专业的数据库链接池产品,如C3P0链接池软件和DBCP连接池软件。但是这些第三方的连接池软件都有个字的API,他们并没有实现HIBERNATE指定的COnectionProvider接口。
例如DBCP连接池的API包括:
org.apache.commons.pool.KeyedObjectPoolFactory接口
org.apache.commons.pool.ObjectPool 接口


接口常用设计模式_第1张图片
hibernate只会访问ConnectionProvider接口,这个接口有3个实现类,其中DBCPConnectionProvider和C3POConnectionProvider类是适配器,他们分别负责把DBCP和C3PO链接池转换为ConnectionProvider接口,这两个适配器都采用组合实现方式。

 

单例模式 键值的缓存方案

每一次进行键值的查询,有必要吗? 毕竟一个键的值只是一些序列号码,与其每接到一次请求就查询一次,

然后向客户端提供一个值,不如在一次查询中一次性地预先等级多个键值,然后连续多次的向客户端提供这些预定的键值。

这样一来 不是就节省了大部分不必要的数据库查询操作吗?

 

public class KeyGenerator {
     private static KeyGenerator keygen = 
                new KeyGenerator();
     private static final int POOL_SIZE = 20 ;
     private KeyInfo key;
     
    /**
     私有构造,保证外界无法直接实例化
    */
     private KeyGenerator() {
         key = new KeyInfo(POOL_SIZE);
    }
    
    public static KeyGenerator getInstance() {
      return keygen;
    }

    public synchronized int getNextKey() {
           return key.getNextKey();
   }   


}
 
public KeyInfo {
      private int keyMax ;
      private int keyMin ; 
      private int nextKey;
      private  int poolSize;
      
      public KeyInfo(int poolSize) {
           this.poolSize = poolSize ;
           retrieveFromDB();
      }
      
       public int getKeyMax() {
            return keyMax;
       }

       public int getNextKey() {
              if(nextKey > keyMax) {
                  retrieveFromDB();
               }
      }

}
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(apache,设计模式,Hibernate,生活)