框架升级之单例模式及统一异常处理

10.1 单例模式

单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点以供外部代码使用。以下是关于单例模式的详细解析:

一、定义与特点

  • 定义:单例模式指一个类只有一个实例,且该类能自行创建这个实例的一种模式。
  • 特点
    1. 类只有一个实例。
    2. 该类自行创建这个实例。
    3. 该类向整个系统提供这个实例的访问点。

 1.加载配置数据

数据库配置信息存储于database,properties配置文件中,具体配置信息如下所示

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///cvs_db?serverTimezone=GMT-8
username=root
password=liuyuhan

Basedao类中Init()方法负责从database.properties配置文件中加载配置信息

2.获取数据库的连接对象

使用Connection getConnection()方法获取数据库连接,返回Connection示例。

3.处理查询操作

ResultSet execute(Connection,ProparedStatement,ResultSet,String,Object[])方法:负责根据传入的参数完成数据的查询操作,返回结果集ResultSet。

4.处理增、删、改操作

使用 int execute(Connection,ProparedStatement,String,Object[])方法根据传入的参数完成数据的更新(增、删、改)操作,返回影响的行数。

5.关闭数据库连接

使用boolean closeResource(Connection,ProparedStatement,ResultSet)方法,负责根据传入的参数进行相应资源的关闭操作,返回boolean值。

这里可以用单例模式的思想来解决,把读取数据库配置文件的操作提前到一个工具类中,并把该工具类设计为单例模式。实现单例模式必须满足三个关键点:一个类只有一个实例,自行创建实例对象,对外提供实例对象,下面分别进行讲解。

1.一个类只有一个实例

单例模式即一个类只能有一个实例,要满足这个关键点,就不能允许外界随意创建该类的实例,可以通过私有化构造方法达到这一目的,在com.bdqn.utils包下创建ConfigManager.java,关键代码如下:

package com.bdqn.utils;

import org.junit.platform.commons.function.Try;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ConfigManager {
    // 在类加载时即创建ConfigManager实例
    private static Properties properties;
    // 杜绝了外界创建该类对象,私有构造方法
    private ConfigManager(){
        String configFile = "database.properties";
        properties = new Properties();
        //得到当前类的类加载器并将配置文件加载到输入流中
        InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
        try {
            // 从输入流中读取属性列表
            properties.load(is);
            is.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }

通过私有化构造方法,杜绝了外界创建该类实例的功能。把读取配置文件的I/O操作代码放到私有构造方法中,可有效地保证I/O操作在整个系统运行期间仅被执行一次,可大大减少资源的消耗。

2.自行创建实例对象

既然外界不可以创建该类的实例,那么就需要在该类内部创建一个实例,关键代码如下:

package com.bdqn.utils;

import org.junit.platform.commons.function.Try;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ConfigManager {
    // 在类加载时即创建ConfigManager实例
    private static ConfigManager configManager = new ConfigManager();
    private static Properties properties;
    // 杜绝了外界创建该类对象,私有构造方法
    private ConfigManager(){
        String configFile = "database.properties";
        properties = new Properties();
        //得到当前类的类加载器并将配置文件加载到输入流中
        InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
        try {
            // 从输入流中读取属性列表
            properties.load(is);
            is.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值