python单例模式数据库连接池_《java设计模式》一文带你了解单例模式
写在前面
五一放假了,大家是不是因为疫情都减少了出门的频率那?不出门我们就一起在家学习吧!下面就让我们从一个问题出发,开始今天的文章吧。你的类有没有“超生”(到处都是该类的实例)那,它是不是也需要“计划生育”(只需要一个实例)啊?什么你不会?没事让我来告诉你解决类“超生”的办法,使用单例设计模式。下面让我们来一起学习一下单例模式。
概述
什么是单例模式?
单例模式是创建类型中常用的一种设计模式。该模式下的类有且仅有一个实例。
优点
1、可以严格控制单例类的使用者怎样以及何时访问唯一的实例。
2、只有一个实例,可以节约系统资源,提高系统的性能,减轻GC的压力。
凡事有利就要弊,单例模式也不可以滥用。
缺点
1、单例模式的扩展性很差,因为没有抽象层。
2、单例模式在一定程度上违背了“单一职责原则”。
不可以将数据库连接池对象设计为的单例类,如果共享连接池对象的程序过多会出现连接池溢出的问题。不可以使用反射,这样会声明出另一个实例。
创建方式
1、饿汉式
提前创建好类的实例不需要等待创建的时间,直接就可以使用。
/** * 饿汉式(单例模式) */public class HungrySingleton { // 私有构造方法 private HungrySingleton() { } // 创建一个实例 private static final HungrySingleton HUNGRY_SINGLETON_INSTANCE = new HungrySingleton(); /** * 获取实例的方法 */ public static HungrySingleton getHungrySingleton() { return HUNGRY_SINGLETON_INSTANCE; }}
该方式可能在还不需要此实例的时候就已经将创建出来了,没有起到懒加载的效果。
2、使用静态内部类
通过使用静态内部类的方式优化上面的饿汉式,起到懒加载的效果。
/** * 使用静态内部类完成单例模式 */public class HungrySingleton { // 私有构造方法 private HungrySingleton() { } // 利用静态类的加载时机实现懒加载 private static class InnerHungrySingleton{ private static final HungrySingleton HUNGRY_SINGLETON_INSTANCE = new HungrySingleton(); } /** * 获取实例的方法 */ public static HungrySingleton getHungrySingleton() { return InnerHungrySingleton.HUNGRY_SINGLETON_INSTANCE; }}
3、懒汉式
在第一次使用时创建实例,使用时需要考虑线程安全问题。
/** * 懒汉式(单例模式) */public class LazySingleton { // 私有构造方法 private LazySingleton() { } // 私有静态属性 private static LazySingleton lazySingletonInstance; /** * 获取实例的方法 */ public static LazySingleton getLazySingleton() { // 双重判断 if (null == lazySingletonInstance) { synchronized (LazySingleton.class) { if (null == lazySingletonInstance) { lazySingletonInstance = new LazySingleton(); } } } return lazySingletonInstance; }}
该方式起到了懒加载的效果,并且也做了线程安全处理。
4、使用枚举
利用枚举的特性让JVM来保证线程安全问题和单一实例的问题。
/** * 使用枚举实现单例 */public enum SingletonEnum { INSTANCE; private People people; SingletonEnum(){ people = new People(); } public People getPeople() { return people; } // 定义了一个内部类,为了方便代码展示,也可以是一个独立的类。 class People { }}
使用枚举有一个缺点是需要更多的内存空间。
今天的分享就到这里了,看在我五一放假还坚持分享的份上大家能不能给我点个赞啊?
python单例模式数据库连接池_《java设计模式》一文带你了解单例模式相关推荐
- python 数据库连接池_【转】Python 数据库连接池
python编程中可以使用pymysql进行数据库连接及增删改查操作,但每次连接mysql请求时,都是独立的去请求访问,比较浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响.因 ...
- Java数据库开发与应用之MySQL数据库、JDBC操作数据库、C3P0数据库连接池,Java反射等
MySQL数据库,JDBC接口,MyBatis框架等,掌握的数据的存放和管理. Java数据库开发基础,介绍MySQL数据库.JDBC操作数据库.C3P0数据库连接池,Java反射等内容,进行油画商城 ...
- python实现数据库连接池_Python实现Mysql数据库连接池
Python实现Mysql数据库连接池 python连接Mysql数据库: python编程中可以使用MySQLdb进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接mysql数据库请求时,都 ...
- java面试 数据库连接池_阿里面试官:数据库连接池有必要吗?你对它的底层实现了解过没?...
# 前言 数据库连接池的基本思想是:为数据库连接建立一个"缓冲池",预先在池中放入一定数量的数据库连接管道,需要时,从池子中取出管道进行使用,操作完毕后,在将管道放入池子中,从而避 ...
- Java设计模式(方法工厂类、单例模式、代理模式、策略模式、适配器、观察者、装饰类等)
目录 一.简单工厂模式(Factory Method) 二.工厂方法模式 三.抽象工厂模式(Abstract Factory) 3.1 三个工厂模式区别: 四.单例模式(Singleton) 1.饿汉 ...
- Java设计模式——为什么要用枚举实现单例模式(避免反射、序列化问题)
1.序言 相信如果能看到我这篇博客的小伙伴,肯定都看过Joshua Bloch大神说过的这句话:"单元素的枚举类型已经成为实现Singleton的最佳方法".其实,第一次读到这 ...
- Java设计模式(4 / 23):单例模式
文章目录 单例模式的应用场景 饿汉式单例模式 懒汉式单例模式 改进:synchronized 改进:双重检查锁 改进:静态内部类 破坏单例 用反射破坏单例 用序列化破坏单例 解密 注册式单例模式 枚举 ...
- mysql 常用数据库连接池_常见的数据库连接池
欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入 2.C3P0 在Hibernate和Spring中默认支持该数据库连接池 需要引入:c3p0-0.9.1.2.jar包,如果 ...
- 阿里巴巴(alibaba)系列_druid 数据库连接池_监控(一篇搞定)记录执行慢的sql语句...
参考帖子:http://www.cnblogs.com/han-1034683568/p/6730869.html Druid数据连接池简介 Druid是Java语言中最好的数据库连接池.Druid能 ...
- Java设计模式及应用场景之《单例模式》
文章目录 一.单例模式定义 二.单例模式的结构和说明 三.懒汉式和饿汉式的实现 1.懒汉式 2.饿汉式 四.懒汉式和饿汉式的优缺点 五.双重检查加锁方式的实现 六.类级内部类方式的实现 七.枚举方式的 ...
最新文章
- 数据结构之直接插入排序
- 软件测试2019:第三次作业
- 华为正式发布鸿蒙智慧屏,华为正式发布鸿蒙OS操作系统 智慧屏将率先使用
- 扩展方法where方法查询不到数据,不会抛异常,也不是返回的null
- Nginx Install 记录
- 亚马逊aws 服务器删除_AWS推出Apache Airflow全托管工作流MWAA
- “ 70后”作家:从尴尬自省到扬眉吐气
- Spring Hibernate教程
- Hadoop入门进阶步步高(六-Hadoop1.x与Hadoop2的区别
- JSF是什么?它与Struts是什么关系?
- 第13届 广东工业大学ACM程序设计大赛 C题 平分游戏
- Facebook广告账号主页创建时,其实还有这些小知识!
- Android ListView下拉刷新点击加载更多
- 毕业设计管理系统(JAVA毕业设计)
- IP雷达4.0 测试版
- 明尼苏达双城计算机科学硕士申请截止日期,明尼苏达大学双城分校
- 【手把手带你刷LeetCode】——02.出现1次和K次的数(位运算)
- 我!程序媛!上家阿里巴巴,下家字节跳动!薪资翻番!选择裸辞躺平!无限期休息!...
- php反向引用,JavaScript 正则应用详解【模式、欲查、反向引用等】
- 安装Kali Linux系统 全流程详解