zoukankan      html  css  js  c++  java
  • 包装设计模式——

     首先建立数据连接成(自己建立的)
    /**
     * 存在必要性?
     *         数据库连接作为非常重要的资源 ,用完了要不要立即销毁?----(不能立即关闭)
     * 不能立即关闭?谁维护
     *             ---------------专门交给一个人来管理(池-----------池子中放了好多数据库连接)
     *
     * 非常 有必要存在!!!
     *                 池子在java类中如何表现?--------------------集合--------(Connection)----用什么集合?
     *
     * List  集合来模拟池
     *             1.初始化一些连接
     *
     * @author wangli
     *
     */
    public class MyDataSource1 {
        private static  List<Connection> pool = new ArrayList<Connection>();//池子
        private static int size=10;
        public static void setSize(int size) {
            MyDataSource1.size = size;
        }
        
        //初始化池中的连接
        static{
            try {
                for (int i = 0; i < size; i++) {
                    pool.add(JdbcUtil.getConnection());
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        }
        
        //统一提供方法,用于从池中获取连接
        public static synchronized Connection getConnection(){
            if(pool.size()>0){
                Connection con =  pool.remove(0);//删除这个连接,因为别人此时不能再用它
                
                //真正开始包装 别人
                MyConnection2 con2 = new MyConnection2(con,pool);
                return con2;
            }else{
                throw new RuntimeException("池中无连接");
            }
            
        }
        
        //还回一个连接到池中
        public static void close(Connection con){
            pool.add(con);//将这个连接回收到池中
        }

        //取池
        public static List<Connection> getPool() {
            return pool;
        }
        
        
        
    }


    一、外包装和被包装实现一样的接口
    public class ConnectionAdapter implements Connection { } 二、
     //包装模式                                     //似你    
    public class MyConnection2  extends ConnectionAdapter {
        private Connection con;//还有你
        private List<Connection> pool;
        //拜托你
        public MyConnection2(Connection con,List<Connection> pool){
            this.con  = con;
            this.pool = pool;
        }
        
        @Override  //改写它
        public void close() throws SQLException {
            pool.add(con);
        }

        
    }
    三、test测试一下
        /**
         * @param args
         */
        public static void main(String[] args) {
            MyDataSource1 myds = new MyDataSource1();
            System.out.println("初始化好了,池中连接数:"+myds.getPool().size());
            
            Connection con = myds.getConnection();//从池中取一个连接
            System.out.println("取出但未还,池中连接数:"+myds.getPool().size());
            
            System.out.println("当前连接对象:"+con);
            try {
                con.close();//面向接口编程,con其实是MyConnection2   对象。调用的是MyConnection2 .close()既被包装后改写的close()方法。
            } catch (SQLException e) {
                e.printStackTrace();
            }
            
            System.out.println("用完后还了,池中连接数:"+myds.getPool().size());
        }
    
    
    



  • 相关阅读:
    发布网站配置IIS(把网上找到的解决方法综合了一下)
    NPOI导出word,以及对table的一些设置
    NPOI导出Excel文件,对单元格的一些设置
    使用NPOI完成导出Excel文件
    KinderEditor编辑器使用
    无法解决“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”与“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”之间的冲突。正在随意选择“Newtonsoft.Jso
    将获得到的json赋值到下拉框
    loj #6247. 九个太阳
    死亡笔记
    Count On A Tree II.
  • 原文地址:https://www.cnblogs.com/baijin05/p/5073764.html
Copyright © 2011-2022 走看看