【封装丨工具类】

封装工具类

  • 封装 Java 工具类
    • 1. 使用静态工厂方法或静态方法封装实例
    • 2.将工具类中的方法进行分组
    • 3. 常用方法定义为静态方法或枚举
    • 4. 工厂 | 抽象工厂模式
    • 5. 访问数据库
      • 5.1 JDBC API :
      • 5.2 第三方数据库

封装 Java 工具类

1. 使用静态工厂方法或静态方法封装实例

使用静态工厂方法或静态方法封装实例的好处:
 1.提高代码的复用性。通过将实例化逻辑封装在静态方法中,可以在多个地方重复使用同一个实例,从而提高代码的复用性。
 2.隐藏实例化细节。将实例化逻辑封装在静态方法中,可以隐藏实例化的具体实现细节,使得代码更加简洁易懂。
 3.增加代码的安全性和可维护性。通过将实例化逻辑封装在静态方法中,可以限制对实例化的访问和操作,从而增加代码的安全性和可维护性。

下面是一个使用静态工厂方法封装实例的示例:


public class MyClass {private static final int MAX_COUNT = 10;// 静态工厂方法,用于创建MyClass对象public static MyClass create(int count) {if (count > MAX_COUNT) {throw new IllegalArgumentException("Count must be less than or equal to " + MAX_COUNT);}return new MyClass(count);}// 构造函数,用于初始化实例状态private MyClass(int count) {// ...}// 其他公共方法...
}// 在其他类中调用MyClass的静态工厂方法创建实例MyClass myClass = MyClass.create(5);

2.将工具类中的方法进行分组

  将工具类中的方法进行分组,按照功能进行分类,并将它们封装到不同的类中实例可以提高代码的可读性和可维护性。

以下是一个示例:

  假设我们有一个工具类 Utils,其中包含一些常用的方法,例如字符串处理、日期时间处理、文件操作等。我们可以将这些方法按照功能进行分类,并将它们封装到不同的类中实例。

  1. StringUtils:用于字符串操作,例如大小写转换、截取、替换等。

public class StringUtils {public static String toLowerCase(String str) {// ...}public static String trim(String str) {// ...}public static String replace(String str, String oldStr, String newStr) {// ...}
}
  1. DateUtils:用于日期时间操作,例如获取当前时间、格式化日期时间等。

public class DateUtils {public static LocalDateTime now() {// ...}public static String format(LocalDateTime dateTime, String pattern) {// ...}
}
  1. FileUtils:用于文件操作,例如创建文件、读取文件、写入文件等。

public class FileUtils {public static boolean createFile(String filePath) throws FileNotFoundException {// ...}public static void writeToFile(String filePath, String content) throws IOException {// ...}public static String readFromFile(String filePath) throws IOException {// ...}
}

  通过将这些方法封装到不同的类中实例,我们可以更方便地使用它们,并且可以更好地组织和管理代码。例如,在需要字符串操作的地方,可以直接调用 StringUtils 中的方法;在需要日期时间操作的地方,可以直接调用 DateUtils

3. 常用方法定义为静态方法或枚举

  将常用的方法定义为静态方法或者枚举实例可以提高代码的可读性和可维护性。

  以下是一些常见的方法,以及它们应该如何被定义:

  1. 字符串操作方法:例如 toLowerCase()trim()replace() 等。
    这些方法通常用于字符串处理,可以将它们定义为静态方法,以便在需要时可以直接调用。

public static String toLowerCase(String str) {return str.toLowerCase();
}public static String trim(String str) {return str.trim();
}public static String replace(String str, String oldStr, String newStr) {return str.replace(oldStr, newStr);
}
  1. 日期时间操作方法:例如 now()format() 等。
    这些方法通常用于日期时间处理,可以将它们定义为静态方法,以便在需要时可以直接调用。

public static LocalDateTime now() {return LocalDateTime.now();
}public static String format(LocalDateTime dateTime, String pattern) {return dateTime.format(DateTimeFormatter.ofPattern(pattern));
}
  1. 文件操作方法:例如 createFile()writeToFile()readFromFile() 等。
    这些方法通常用于文件操作,可以将它们定义为静态方法或者使用枚举实例来封装。如果使用枚举实例,可以在枚举中定义常量,然后在调用方法时传入相应的常量值。

public enum FileAction {CREATE, WRITE, READ;public static FileAction createFile(String filePath) throws FileNotFoundException {// ...}public static void writeToFile(String filePath, String content) throws IOException {// ...}public static String readFromFile(String filePath) throws IOException {// ...}
}public class FileUtils {public static boolean createFile(String filePath) throws FileNotFoundException, IllegalArgumentException, FileAlreadyExistsException, SecurityException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, InstantiationException, ClassNotFoundException {FileAction action = FileAction.CREATE.equals(fileAction) ? FileAction.CREATE : FileAction.READ;switch (action) {case CREATE:// ...break;}}
}

4. 工厂 | 抽象工厂模式

  工厂方法模式和抽象工厂模式都是创建型设计模式,它们都可以用于将对象的创建过程从客户端代码中解耦出来。下面分别使用示例来说明这两种模式的使用。

  1. 工厂模式

  工厂方法模式用于创建一系列相关或相互依赖的对象,它将对象的创建过程封装在一个工厂类中,客户端只需要调用工厂类即可获得相应的对象。

  例如,我们有一个工具类 Tool,其中包含了一些工具方法,比如计算两个数的和、计算两个数的积等。现在我们需要为每个工具方法都创建一个新的工具类实例,可以使用工厂方法模式来实现。


public interface Tool {int add(int a, int b);int subtract(int a, int b);int multiply(int a, int b);
}public class Calculator implements Tool {@Overridepublic int add(int a, int b) {return a + b;}@Overridepublic int subtract(int a, int b) {return a - b;}@Overridepublic int multiply(int a, int b) {return a * b;}
}public class CalculatorFactory {public static Tool createCalculator(String type) {if (type.equalsIgnoreCase("add")) {return new Calculator();} else if (type.equalsIgnoreCase("subtract")) {return new Calculator();} else if (type.equalsIgnoreCase("multiply")) {return new Calculator();} else {throw new IllegalArgumentException("Invalid operation type: " + type);}}
}// 在客户端代码中使用工厂方法创建工具类实例
Tool calculator = CalculatorFactory.createCalculator("add");
System.out.println("10 + 20 = " + calculator.add(10, 20)); // 输出30
System.out.println("50 - 30 = " + calculator.subtract(50, 30)); // 输出20
System.out.println("10 * 20 = " + calculator.multiply(10, 20)); // 输出200
  1. 抽象工厂模式

  抽象工厂模式是一种创建型设计模式,它提供了一种统一的方式来创建一系列相关或依赖对象的实例,而不需要指定它们的具体类。

以下是一个简单的抽象工厂模式实例:

// 抽象产品接口
public interface Product {void use();
}// 具体产品A1实现
public class ConcreteProductA1 implements Product {@Overridepublic void use() {System.out.println("使用具体产品A1");}
}// 具体产品A2实现
public class ConcreteProductA2 implements Product {@Overridepublic void use() {System.out.println("使用具体产品A2");}
}// 具体产品B1实现
public class ConcreteProductB1 implements Product {@Overridepublic void use() {System.out.println("使用具体产品B1");}
}// 具体产品B2实现
public class ConcreteProductB2 implements Product {@Overridepublic void use() {System.out.println("使用具体产品B2");}
}// 具体工厂A实现
public class ConcreteFactoryA implements Factory {@Overridepublic Product createProductA() {return new ConcreteProductA1();}
}// 具体工厂B实现
public class ConcreteFactoryB implements Factory {@Overridepublic Product createProductB() {return new ConcreteProductB1();}
}

5. 访问数据库

  对于一些需要访问数据库的方法,可以使用 JDBC 驱动程序提供的 API 或者第三方的数据库访问库来进行操作。这样可以避免手写 SQL 语句,从而提高代码的可读性和可维护性。

5.1 JDBC API :

使用 JDBC API 访问数据库有以下好处:

  1. 灵活性高:JDBC API 是标准的方式,可以与各种不同类型的数据库进行交互,包括关系型数据库、非关系型数据库等。
  2. 可控性强:通过 JDBC API 访问数据库,可以在应用程序和数据库之间实现完全的解耦,使得对数据库的操作更加可控。
  3. 易于维护:使用 JDBC API 访问数据库,可以将数据访问逻辑从业务逻辑中分离出来,使得代码更加清晰易懂,便于维护。
  4. 支持事务处理:JDBC API 支持事务处理,可以保证数据的一致性和可靠性。
  5. 安全性高:JDBC API 可以提供多种安全机制,如加密、认证、授权等,可以保护数据的安全性。

以下是使用 JDBC 驱动程序提供的 API 进行数据库操作的示例代码:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class DBOperations {// JDBC 驱动名和数据库 URLprivate static final String DRIVER_NAME = "com.mysql.jdbc.Driver";private static final String DB_URL = "jdbc:mysql://localhost:3306/demo";public static void main(String[] args) throws SQLException, ClassNotFoundException {// 加载 JDBC 驱动程序Class.forName(DRIVER_NAME);// 建立数据库连接Connection conn = DriverManager.getConnection(DB_URL, "username", "password");// 创建 PreparedStatement 对象PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM test WHERE id = ?");// 设置占位符参数值pstmt.setInt(1, 123);// 执行查询语句并获取结果集ResultSet rs = pstmt.executeQuery();while (rs.next()) {int id = rs.getInt("id");String name = rs.getString("name");int age = rs.getInt("age");System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);}// 关闭结果集、PreparedStatement 和数据库连接rs.close();pstmt.close();conn.close();}
}

  以上代码使用了 MySQL 数据库,需要在项目中添加 MySQL JDBC 驱动程序的依赖。如果使用其他数据库,需要替换 DRIVER_NAMEDB_URL 和相应的 JDBC 驱动程序。

5.2 第三方数据库

使用第三方的数据库访问库有以下好处:

  1. 简化开发:第三方的数据库访问库通常提供了简单易用的 API,可以大大简化开发人员的工作量,提高开发效率。
  2. 提高性能:第三方的数据库访问库通常会对底层数据库进行优化和封装,从而提高数据库的访问性能。
  3. 支持更多的功能:第三方的数据库访问库通常会提供更多的功能和特性,如事务处理、缓存、连接池等,可以满足不同场景下的需求。
  4. 更好的可维护性:使用第三方的数据库访问库可以减少对底层数据库的依赖,从而降低代码的复杂度和维护难度。
  5. 更好的安全性:第三方的数据库访问库通常会提供多种安全机制,如加密、认证、授权等,可以保护数据的安全性。

以下是使用第三方的数据库访问库—— MyBatis 进行数据库操作的示例代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.dao.UserDao"><select id="getUserById" parameterType="int"resultType="com.example.entity.User">select * from user where id = #{id}</select></mapper>

  以上代码使用了 MyBatis 作为数据库访问库,需要在项目中添加相应的依赖。如果使用其他数据库或版本,需要替换 namespace 标签中的类名和相应的 Mapper XML 文件名。然后,可以在 Java 代码中通过 SqlSessionFactory 对象来获取 UserDao 接口的实例,并调用其中的方法来进行数据库操作。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class DBOperations {@Autowiredprivate SqlSessionFactory sqlSessionFactory;public User getUserById(int id) throws SQLException {return sqlSessionFactory.getObject().openSession().getUserDao().getUserById(id);}
}

  以上代码中,SqlSessionFactory 是 MyBatis 的核心组件之一,用于创建 SqlSession 对象并管理其生命周期。在 Spring Boot 应用中,可以通过 @Autowired 注解将 SqlSessionFactory 对象自动注入到需要它的组件中。然后,可以通过 openSession() 方法来获取 SqlSession 对象,并调用其中的方法来进行数据库操作。

在这里插入图片描述

  如果喜欢的话,欢迎 🤞关注 👍点赞 💬评论 🤝收藏  🙌一起讨论你的评价就是我✍️创作的动力!					  💞💞💞

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

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

相关文章

netty学习(2):多个客户端与服务器通信

1. 基于前面一节netty学习&#xff08;1&#xff09;:1个客户端与服务器通信 只需要把服务器的handler改造一下即可&#xff0c;通过ChannelGroup 找到所有的客户端channel&#xff0c;发送消息即可。 package server;import io.netty.channel.*; import io.netty.channel.gr…

68、基于51单片机语音识别控制小车行走系统设计(程序+原理图+PCB源文件+参考论文+开题报告+任务书+元器件清单等)

摘 要 随着电子工业的发展&#xff0c;具有语音控制功能的小车越来越受到人们的青睐&#xff0c;在人们的日常消费生活中起着不可忽视的作用。目前&#xff0c;声控技术已在很多领域得到使用。 本文对语音控制功能的小车概况做了阐述。在硬件设计方面&#xff0c;本论文以凌阳…

LabVIEW评估儿童的运动认知技能

LabVIEW评估儿童的运动认知技能 以前测量认知运动功能的技术范围从基本和耗时的笔和纸技术&#xff0c;到使用准确但复杂和昂贵的实验室设备。Kinelab的主要要求是提供一个易于配置、坚固且便携的平台&#xff0c;以便在向4-12岁的儿童展示交互式视觉刺激期间快速收集运动学测…

blender 之点云渲染(论文渲图)

blender 之点云渲染&#xff08;论文渲图&#xff09; 一、导入点云1.新建2.导入点云3.位置移动&放大缩小 二、Geometry Nodes实体化点云1.新建节点2.实体化 三、给实体化点云添加材质四、设置渲染引擎更换为Cycles。 五、对准视角1.新建一个球2.创建相机视角跟踪3.将uv球挪…

LLM prompt提示构造案例

参考&#xff1a; https://github.com/PlexPt/awesome-chatgpt-prompts-zh 吴恩达 prompt工程应用&#xff1a; https://www.bilibili.com/video/BV1No4y1t7Zn prompt构造案例代码 prompt """文本分类任务&#xff1a;将一段用户给外卖服务的评论进行分类…

获取R、G、B通道的直方图

clc;%clc的作用就是清屏幕 clear;%clear是删除所有的变量 close all;%close all是将所有打开的图片关掉。imageimread(E:\我的桌面\MATLAB\练习\2.jpg);%绝对路径的 Rimage(:,:,1); Gimage(:,:,2); Bimage(:,:,3); hrimhist(R); hgimhist(G); hbimhist(B); x0:1:255; figure…

【探测器】opencv显示探测器的raw图像

【探测器】opencv显示探测器的raw图像 1、背景2、代码3、下载 1、背景 对于探测器&#xff08;相对于可见光成像的相机&#xff0c;这里的探测器指的是对X光成像的相机&#xff09;。 RAW文件几乎是未经过处理而直接从CCD或CMOS上得到的信息。 RAW格式是无损格式&#xff0c;相…

【什么是iMessage苹果推】怎样来获取设备令牌(Device Token)实现步骤

要获取设备令牌&#xff08;Device Token&#xff09;&#xff0c;您需要在应用程序中实现以下步骤&#xff1a; 在应用程序中请求用户授权&#xff1a;您需要请求用户授权允许应用程序发送远程通知。这可以通过使用 UNUserNotificationCenter&#xff08;User Notifications …

国产32位MCU低成本烟机变频风机方案

家用油烟机主要由风机系统&#xff0c;控制系统&#xff0c;滤油装置&#xff0c;外壳和悬吊装置组成&#xff0c;其中风机系统是油烟机的心脏&#xff0c;通常由电机和叶轮组成&#xff0c;一台油烟机功率的大小&#xff0c;也是由风机系统决定的&#xff0c;控制系统是烟机最…

笔记:flutter中一些流行的 UI 相关库

笔记&#xff1a;flutter中一些流行的 UI 相关库 CSDN&#xff1a;https://jclee95.blog.csdn.net本文收录了很多在 flutter pub 上显示流行度较高的第三方UI库和UI框架&#xff0c;对它们的效果进行了截图&#xff0c;目的是方便开发时进行查找&#xff1b;这些模块多数来自于…

CLion开发STM32

CLion开发STM32 opencd https://gnutoolchains.com/arm-eabi/openocd/ gcc-arm-none-eabi https://launchpad.net/gcc-arm-embedded/download arm-none-eabi-gcc -v“gcc-arm-none-eabi是GNU项目下的软件,是一个面向裸机arm的编译器。 mingw 需要把opencd和的工具链添加…

使用Selenium-PO设计模式提高Web自动化测试效率

PO&#xff08;page object&#xff09;设计模式是在自动化中已经流行起来的一种易于维护和减少代码的设计模式。在自动化测试中&#xff0c;PO对象作为一个与页面交互的接口。测试中需要与页面的UI进行交互时&#xff0c;便调用PO的方法。这样做的好处是&#xff0c;如果页面的…