包装类

实现了javax.sql.DataSource的才是标准的数据库连接池,按照字面意思,一般称之为数据源。
对于一个已知类的某个方法进行功能上的改变有以下三种方式:
1、定义子类,扩展父类的某个功能。(此处行不通)


2、利用包装设计模式改写原有的类的功能
a、编写一个类实现与被改写类(com.mysql.jdbc.Connection)相同的接口
b、定义一个引用,记住被改写类的实例
c、定义构造方法,传入被改写类的实例
d、对于要改写的方法,改写即可
e、对于不需要改写的方法,调用原有的对象的对应方法

针对已经实现的类进行改写它的方法。


*****包装设计模式
*****默认适配器设计模式

上一篇介绍动态代理模式

 

 

 

 

 1 package cn.itcast.jdbc.pool;
 2 
 3 import java.io.InputStream;
 4 import java.sql.Connection;
 5 import java.sql.DriverManager;
 6 import java.util.LinkedList;
 7 import java.util.Properties;
 8 
 9 import cn.itcast.util.JdbcUtil;
10 //数据库连接池的原理
11 public class SimpleConnectionPool {
12     private static String driverClassName;
13     private static String url;
14     private static String user;
15     private static String password;
16     private static LinkedList<Connection> pool = new LinkedList<Connection>();//存储连接的池
17     static{
18         try {
19             InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties");
20             Properties props = new Properties();
21             props.load(in);
22             driverClassName = props.getProperty("driverClassName");
23             url = props.getProperty("url");
24             user = props.getProperty("user");
25             password = props.getProperty("password");
26             Class.forName(driverClassName);
27             
28             //初始化10个连接到池中
29             for(int i=0;i<10;i++){
30                 Connection conn = DriverManager.getConnection(url, user, password);
31                 pool.add(conn);
32             }
33 //            System.out.println("初始化的连接有:");
34 //            for(Connection c:pool)
35 //                System.out.println(c);
36         } catch (Exception e) {
37             e.printStackTrace();
38         }
39     }
40     public synchronized static Connection getConnection(){
41         if(pool.size()>0){
42             Connection conn = pool.remove();//从池中拿到连接,并从池中删除掉
43             
44 //            System.out.println("取出的是:"+conn);
45 //            System.out.println("池中还有:");
46 //            for(Connection c:pool)
47 //                System.out.println(c);
48             return conn;
49         }else{
50             System.out.println("对不起!服务器真忙");
51             return null;
52         }
53     }
54     public static void release(Connection conn){//把连接放回池中
55         pool.add(conn);
56 //        System.out.println("回来的是:" +conn);
57 //        System.out.println("回来后池中的连接:");
58 //        for(Connection c:pool)
59 //            System.out.println(c);
60     }
61 }

 

posted on 2014-05-23 13:29  wf110  阅读(354)  评论(0编辑  收藏  举报