装饰者模式: 我是一个没有感情的杀手

在复习到自建数据库连接池的时候有点蒙了,再次翻看视频整理如下:(装饰者模式下自建数据库连接池修改close功能为 回收连接对象)

自备材料:数据库连接对象的获取的工具类 jdbcUtils(产出数据库连接对象getConnection 以及 释放资源的close)

—————————————————————————————————————————————————

public class MyDataSource implements DataSource {
  List <Connection> list = new ArrayList<>();        //用来存放连接对象的集合(可以看作是一个池子)
  public MyDataSource() {                //构造方式中创建了10个连接对象,放到池子中
    for (int i = 0; i < 10; i++) {
      Connection conn = JDBCUtil.getConn();
      list.add(conn);
    }
  }

  @Override
  public Connection getConnection() throws SQLException {
    if(list.size() == 0 ){                  //获取连接对象之前自检一边池子中是否还有多余连接对象
      for (int i = 0; i < 5; i++) {               //如果拿那完了  我们每次设定涨幅为5个 ,再创建五个
        Connection conn = JDBCUtil.getConn();
        list.add(conn);
      }
    }

    Connection conn = list.remove(0);                //remove()  移除并返回该对象,我们就获得了一个连接池对象,且池子中也相应的减少
    Connection connection = new ConnectionWrap(conn, list);   //在把这个对象抛出去的时候, 对这个对象进行包装。(关键所在)
    return connection;                    //返回包装后的对象
  }

—————————————————————————————————————————————————

装饰者模式下的包装类

public class ConnectionWrap implements Connection{           
  Connection connection = null;
  List <Connection> list ;
  public ConnectionWrap(Connection connection , List <Connection> list) {   //为全局变量赋值 ,待会儿需要  
    super();
    this.connection = connection;
    this.list = list;
  }

  @Override
  public void close() throws SQLException {      //这个是我们要使用到的方法 所以对其进行装饰修改
    //connection.close();              //原本close() 是释放资源用的 现在我们不要他释放资源了  我们对其变更功能     
    list.add(connection);              //将该连接对象,回收到我们的池中中
  }
  @Override
  public PreparedStatement prepareStatement(String sql) throws SQLException {   //这个方法待会儿我们也要使用,但我们不打算更改,所以调用之前的方法即可
    return connection.prepareStatement(sql);
   }

.......

———————————————————————————————————————————————————

这样一套太极打下来:

  当我们从自建数据源 MyDataSource 中获取对象时, 返回给我们的对象是一个也实现Connection方法的 自建对象,  当我们要调用某个方法时,调用的是这个自建对象中方法,

    如果我们不想对某个方法进行改变, 但又需要时,  使用通过构造传来的那个对象的方法即可

装饰者的大概:

  实现相同的接口,被装饰类 通过装饰类的构造传入 ,作为装饰类的全局变量   想改变某个方式的逻辑时, 直接在装饰类中对应方法修改 ,如果不想改变 ,调用全局变量,启用被装饰类的方法

    在使用的时候, 我们就用装饰类,做我们想做的时候, 体现了多态的思想

装饰者模式&数据库连接池原理的更多相关文章

  1. JDBC数据库连接池原理

    JDBC是java数据库连接的简称.它是一种用于实行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用java语言编写的类和接口组成.其相关的API都在java.sql.*包下 ...

  2. Java数据库连接池原理与简易实现

    1.什么是数据库连接池 我们现在在开发中一定都会用到数据库,为了提高我们的系统的访问速度,数据库优化是一个有效的途径.我们现在开发中使用数据库一般都要经历以下的四个步骤:(1)加载数据库的驱动类,(2 ...

  3. JAVA和C#中数据库连接池原理与应用

    JAVA和C#中数据库连接池原理 在现在的互联网发展中,高并发成为了主流,而最关键的部分就是对数据库操作和访问,在现在的互联网发展中,ORM框架曾出不穷, 比如:.Net-Core的EFCore.Sq ...

  4. Java中数据库连接池原理机制的详细讲解以及项目连接数据库采用JDBC常用的几种连接方式

    连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式 ...

  5. Java中数据库连接池原理机制的详细讲解

    连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式 ...

  6. Java中数据库连接池原理机制的详细讲解(转)

    连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池 (Resource Pool).该模 ...

  7. DBCP数据库连接池原理分析

    在比较大的项目中,需要不断的从数据库中获取数据,Java中则使用JDBC连接数据库,但是获取数据库的连接可是相当耗时的操作,每次连接数据库都获得 .销毁数据库连接,将是很大的一个开销.为了解决这种开销 ...

  8. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析

    作为后台服务开发,在日常工作中我们天天都在跟数据库打交道,一直在进行各种CRUD操作,都会使用到数据库连接池.按照发展历程,业界知名的数据库连接池有以下几种:c3p0.DBCP.Tomcat JDBC ...

  9. 数据库连接池原理 与实现(动脑学院Jack老师课后自己的练习有感)

    第一步: 首先创建一个数据库连接池的接口: 数据库连接池接口有两个主要的方法,其中一个getConnection();  通过数据库连接池返回给用户封装的数据库连接对象 createConnectio ...

随机推荐

  1. OpenSSH配置与基本使用

    SSH访问远程 SSH常见分类: telnet-远程登录协议,23/TCP 明文认证.明文传输(不安全) ssh(Secure SHell)-应用层协议,22/TCP 通讯和认证过程加密.主机认证 用 ...

  2. Epson Pos Printer for .net

    注:因发现各网站爬虫随意收集文章,故做此声明:版权归原作者(Leaf.Duan)所有,转载还请著名出处,谢谢 设备信息 Epson TM-T88IV Thermal Printer,爱普生 TM-T8 ...

  3. 【转载】 Jointwave零延时视频传输for FPGA/ASIC进入军工领域

    半导体知识产权H.264/H.265 硅IP核供应商Jointwave公司的发布了一系列视频编解码RTL IP核,已经成功应用于军事工业领域的指挥作战,无人机UAV控制,航空和航天摄像机,视频记录黑匣 ...

  4. java测试ATM自助操作系统

    开学第一周系主任安排了一项测试,测试要求:模拟ATM自助取款机用文件进行存储账户信息,密码等,并进行存款取款,转账,查询记录等操作,而且要进行文件的读取与录入. 这是一个ATM自助取款的操作系统,进行 ...

  5. Java基本语法实验报告

      题目:       Java基本语法 课程名称:  JAVA语言程序设计 班    级:    信1705-1 姓    名:   刘雨馨     学号:   20173445 指导教师:    ...

  6. 2018.12.30 洛谷P4238 【模板】多项式求逆

    传送门 多项式求逆模板题. 简单讲讲? 多项式求逆 定义: 对于一个多项式A(x)A(x)A(x),如果存在一个多项式B(x)B(x)B(x),满足B(x)B(x)B(x)的次数小于等于A(x)A(x ...

  7. js 判断 undefined,单选 以及下拉框选中状态

    name = $(this).attr("title"); if(typeof(name) == 'undefined'){ alert(1); } typeof 函数 radio ...

  8. KAFKA 监控管理界面 KAFKA EAGLE 安装

    概述 Kafka Eagle监控系统是一款用来监控Kafka集群的工具,目前更新的版本是v1.2.3,支持管理多个Kafka集群.管理Kafka主题(包含查看.删除.创建等).消费者组合消费者实例监控 ...

  9. logcat命令详解【二】

    eclipse 自带的 LogCat 工具太垃圾了, 开始用 adb logcat 在终端查看日志; 1. 解析 adb logcat 的帮助信息 在命令行中输入 adb logcat --help  ...

  10. s4-3 CSMA

    载波侦听多路访问协议  CSMA:Carrier Sense Multiple Access 特点:"先听后发" 改进ALOHA协议的侦听/发送策略  分类 非持续式 持 ...