包装设计模式——

 首先建立数据连接成(自己建立的)
/**
 * 存在必要性?
 *         数据库连接作为非常重要的资源 ,用完了要不要立即销毁?----(不能立即关闭)
 * 不能立即关闭?谁维护
 *             ---------------专门交给一个人来管理(池-----------池子中放了好多数据库连接)
 *
 * 非常 有必要存在!!!
 *                 池子在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());}
 

 




 

转载于:https://www.cnblogs.com/baijin05/p/5073764.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【APICloud系列|29】dialogBox模块(对话框)的实现

导读:dialogBox 封装了十一种款式的对话框,每一种款式都提供一个接口来调用,开发者可按照各个接口的样式来自定义对话框上的文字、图片、图文等 把 dialogBox 模块的 11 个样式分别实现个简单的效果,其中将 alert 方法做了两个样式,如果你觉得我写的样式够丑,请不要喷我,…

【APICloud系列|30】UILoading 模块demo源码的实现

导读:UILoading 模块封装了两种款式的加载提示框,每一种款式都提供一个接口来调用。开发者可参考各个接口的样式来自定义加载提示框上的图片信息 模块:http://www.apicloud.com/mod_detail/31494 index.html <!doctype html> <html> <head><meta cha…

【APICloud系列|31】百度导航功能的实现

导读:百度导航基础功能。d用到了bMap模块,baiduNavigation模块,UIListView模块。样式完全来自AUI。js用到了zepto.j 效果图: 项目结构: index.html <!doctype html> <html> <head><meta charset="utf-8"><meta name="viewport…

osgi简介_OSGi:简介

osgi简介为基于Java的系统创建的OSGi提供了模块化系统的框架。 OSGi使得可以定义每个单独模块与其他模块的依赖关系&#xff0c;并使用户能够控制生命周期并动态更改系统的每个组件。 OSGi是一个规范&#xff0c;最常见的实现可以算作Equinox &#xff0c; Apache Felix和Knopl…

python合并数组输出重复项_python - 不同数组项的所有可能组合[重复] - 堆栈内存溢出...

您需要笛卡尔积 。>>> arrays [... [[1, 2], [3, 4]],... [[4, 5], [5, 6]],... [[7, 8], [8, 9]],... ]>>> import itertools>>> from pprint import pprint>>> pprint(list(itertools.product(*arrays)))[([1, 2], [4, 5], [7, 8]),([1…

GC基本算法及C++GC机制

前言 垃圾收集器是一种动态存储分配器&#xff0c;它自动释放程序不再需要的已分配的块&#xff0c;这些块也称为垃圾。在程序员看来&#xff0c;垃圾就是不再被引用的对象。自动回收垃圾的过程则称为垃圾收集&#xff08;garbage collection&#xff09;。在一个支持垃圾收集的…

【APICloud系列|32】 aMapNavigation高德地图导航的实现

导读:aMapNavigation 模块封装了高德导航的sdk,支持语音导航功能。用户可自行算路策略类型。开发者只需输入起点终点经纬度即可轻松集成高德导航功能,本模块是由第三方模块开发者提供,使用本模块需在线云编译安装包。 效果图: 项目结构: index.html <!doctype html&…

JDK 9早期版本安装后的Windows注册表清理

在我的上一篇博文中 &#xff0c;我演示了在安装早期版本的JDK 9&#xff08;内部版本68&#xff09;之后围绕Oracle Java符号链接 &#xff08;基于Windows的计算机上的C:\ProgramData\Oracle\Java\javapath\目录&#xff09;的问题的解决方案。这似乎阻止了早期&#xff08;更…

storm mysql druid_Druid 集成

title: Storm Druid 集成 layout: documentation documentation: trueStorm Druid Bolt 和 TridentState该模块提供了将数据写入Druid 数据存储的核心Strom和Trident bolt(螺栓)的实现。 该实现使用Druids的Tranquility库向druid发送消息。一些实施细节从现有的借用 Tranquilit…

C++实现链栈的基本操作

之前对顺序栈写了基本操作&#xff0c;认为有必要也动手练练栈的链表实现。对于链栈&#xff0c;一般不会出现栈满的情况。 链栈头文件定义例如以下&#xff1a; #ifndef CSTOCK_H_ #define CSTOCK_H_typedef int elemType;struct Item {elemType data;Item * p_next; }; class…

java实现网上招标系统

导读:本设计尝试用JSP在网络上架构一个下沙派威客网,以推进网站无纸化,过程电子化,管理智能化的发展。本文从理论和实践两个角度出发,对一个具有数据分析功能的下沙派威客网进行设计与实现分析。论文首先较为详尽地介绍了面向对象分析与设计的有关概念与技术,特别深入介绍…

mysql加上判断_在mysql中where加if判断

在mysql中where中多重条件if判断,项目需求如下: 好友关系中本身具有A,B,C三种角色,好友动态分为1,2,3,4,5种类型。A是必须具有的角色,如果具有A角色可查好友动态类型1,3,4 的信息如果具有B角色可查2类型信息,如果具有C角色可查5类型角色。 实现思想如下:先查出好…

Mongodb 笔记01 MongoDB 简介、MongoDB基础知识、启动和停止MongoDB

MongoDB 简介 1. 易于使用&#xff1a;没有固定的模式&#xff0c;根据需要添加和删除字段更加容易 2. 易于扩展&#xff1a;MongoDB的设计采用横向扩展。面向文档的数据模型使它能很容易的再多台服务器之间进行分割。自动处理跨越集群的数据和负载&#xff0c;自动重新分配文档…

java实现俄罗斯方块项目

导读:俄罗斯方块项目,基本功能包括:游戏主界面显示模块、方块及数据显示模块、方块移动控制模块、游戏界面颜色控制模块、游戏进度、等级控制模块等。本项目结构如下: (1)游戏主界面显示模块: 显示游戏和帮助两个菜单; 游戏使用功能键盘,得分 等级; (2)画布…

js数组操作大全

shift:删除原数组第一项&#xff0c;并返回删除元素的值&#xff1b;如果数组为空则返回undefined Javascript代码 var a [1,2,3,4,5]; var b a.shift(); //a:[2,3,4,5] b:1 unshift:将参数添加到原数组开头&#xff0c;并返回数组的长度 Javascript代码 var a [1,2,…

mysql与mssql中datetime类型字段问题_excel数据存入sqlserver过程中,遇到Datetime的格式问题。...

先讲一下我实现的大致思路&#xff1a; 1 读取excel数据&#xff0c;赋值到datatable中&#xff0c;然后在页面上显示 细节描述&#xff1a;有一些列是存到数据库时要是datetime格式的&#xff0c;我在赋值到datatable时也是做 如下处理的 DataColumn dtColumn new DataColumn…

java概述_Java 7功能概述

java概述前面我们讨论了所有未纳入Java 7的内容&#xff0c;然后回顾了将其纳入Java的有用的Fork / Join框架 。 今天的帖子将带我们了解Project Coin的每个功能-一系列小的语言增强功能&#xff0c;这些功能虽然不是开创性的&#xff0c;但是对于任何能够使用JDK 7的开发人员来…

java实现即时通讯软件

导读:即时通讯软件即所谓的聊天工具,其主要用途是用于文字信息的传递与文件传输。使用eclipse作为即时通讯软件的开发工具,使用Socket建立通讯渠道,多线程实现多台计算机同时进行信息的传递,swing技术等进行实际开发相对比较合适。通过一些轻松的注册登录后,在局域网中即…

两种类型的Spark RDD task解析以及iterator解析 -- (视频笔记)

spark 每次提交一个作业&#xff0c;都会划分成不同的stage&#xff0c;除了最后一个stage&#xff08;shuffle map task&#xff09;&#xff0c;前边的stage属于一种类型&#xff08;result task&#xff09;。 spark中的job&#xff0c;内部是由具体task构成&#xff0c;由于…

JBoss BRMS复杂事件处理(CEP)性能基准

技术来了又去&#xff0c;但是一件事保持不变。 在设计企业解决方案时&#xff0c;我们喜欢使我们的生活更轻松的复杂组件&#xff0c;并且作为建筑师和开发人员&#xff0c;我们一直在寻找使我们的生活更轻松的方法。 一种方法是跟上与感兴趣的技术有关的流行新站点。 另一种…