seo网站推广技术,wordpress版权说明,惠州建设网站开发,做网站优势一、单例模式代码实现
public class DatabaseConnection {// 1. 私有静态实例变量private static DatabaseConnection instance;// 2. 私有构造函数#xff0c;防止外部直接创建实例private DatabaseConnection() {// 初始化数据库连接System.out.println(Database con…一、单例模式代码实现
public class DatabaseConnection {// 1. 私有静态实例变量private static DatabaseConnection instance;// 2. 私有构造函数防止外部直接创建实例private DatabaseConnection() {// 初始化数据库连接System.out.println(Database connection initialized.);}// 3. 公共静态方法提供全局访问点public static DatabaseConnection getInstance() {if (instance null) {// 双重检查锁定确保线程安全synchronized (DatabaseConnection.class) {if (instance null) {instance new DatabaseConnection();}}}return instance;}// 4. 示例方法模拟数据库操作public void executeQuery(String query) {System.out.println(Executing query: query);}
}二、日志管理器
场景描述
在一个大型系统中日志记录是必不可少的。为了避免重复创建日志对象我们可以使用单例模式来设计一个 日志管理器统一管理日志的写入和输出。
代码实现
import java.io.FileWriter;
import java.io.IOException;public class Logger {// 1. 私有静态实例变量private static Logger instance;private FileWriter writer;// 2. 私有构造函数防止外部直接创建实例private Logger() {try {// 初始化日志文件writer new FileWriter(app.log, true);} catch (IOException e) {e.printStackTrace();}}// 3. 公共静态方法提供全局访问点public static synchronized Logger getInstance() {if (instance null) {instance new Logger();}return instance;}// 4. 日志记录方法public void log(String message) {try {writer.write(message \n);writer.flush();} catch (IOException e) {e.printStackTrace();}}// 5. 关闭日志文件public void close() {try {writer.close();} catch (IOException e) {e.printStackTrace();}}
}使用场景
public class Application {public static void main(String[] args) {// 获取日志管理器的单例实例Logger logger Logger.getInstance();// 记录日志logger.log(Application started.);logger.log(User logged in: John Doe);// 关闭日志文件logger.close();}
}会在代码里直接生成一个app.log文件
三、配置管理器
场景描述
在项目中通常需要读取配置文件如 config.properties。为了避免重复加载配置文件我们可以使用单例模式来设计一个 配置管理器统一管理配置的读取和访问。
代码实现
import java.util.Properties;
import java.io.FileInputStream;
import java.io.IOException;public class ConfigurationManager {// 1. 私有静态实例变量private static ConfigurationManager instance;private Properties properties;// 2. 私有构造函数防止外部直接创建实例private ConfigurationManager() {properties new Properties();try {// 加载配置文件properties.load(new FileInputStream(config.properties));} catch (IOException e) {e.printStackTrace();}}// 3. 公共静态方法提供全局访问点public static synchronized ConfigurationManager getInstance() {if (instance null) {instance new ConfigurationManager();}return instance;}// 4. 获取配置项public String getProperty(String key) {return properties.getProperty(key);}
}使用场景
public class Application {public static void main(String[] args) {// 获取配置管理器的单例实例ConfigurationManager configManager ConfigurationManager.getInstance();// 读取配置项String dbUrl configManager.getProperty(database.url);String dbUser configManager.getProperty(database.user);System.out.println(Database URL: dbUrl);System.out.println(Database User: dbUser);}
}四、线程池管理器ThreadPool Manager
场景描述
在多线程应用中线程池是管理线程资源的常用方式。为了避免重复创建线程池我们可以使用单例模式来设计一个 线程池管理器统一管理线程池的创建和任务分配。
代码实现
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class ThreadPoolManager {// 1. 私有静态实例变量private static ThreadPoolManager instance;private ExecutorService threadPool;// 2. 私有构造函数防止外部直接创建实例private ThreadPoolManager() {// 初始化线程池固定大小为 10threadPool Executors.newFixedThreadPool(10);}// 3. 公共静态方法提供全局访问点public static synchronized ThreadPoolManager getInstance() {if (instance null) {instance new ThreadPoolManager();}return instance;}// 4. 提交任务到线程池public void submitTask(Runnable task) {threadPool.submit(task);}// 5. 关闭线程池public void shutdown() {threadPool.shutdown();}
}使用场景
public class Application {public static void main(String[] args) {// 获取线程池管理器的单例实例ThreadPoolManager threadPoolManager ThreadPoolManager.getInstance();// 提交任务到线程池for (int i 0; i 20; i) {threadPoolManager.submitTask(() - {System.out.println(Task executed by Thread.currentThread().getName());});}// 关闭线程池threadPoolManager.shutdown();}
}五、数据库连接池
场景描述
在高并发应用中数据库连接池是管理数据库连接资源的常用方式。为了避免重复创建连接池我们可以使用单例模式来设计一个 数据库连接池管理器统一管理连接的获取和释放。
代码实现
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;public class DatabaseConnectionPool {// 1. 私有静态实例变量private static DatabaseConnectionPool instance;private ListConnection connectionPool;private static final int POOL_SIZE 10;// 2. 私有构造函数防止外部直接创建实例private DatabaseConnectionPool() {connectionPool new ArrayList();try {for (int i 0; i POOL_SIZE; i) {Connection connection DriverManager.getConnection(jdbc:mysql://localhost:3306/mydb, user, password);connectionPool.add(connection);}} catch (SQLException e) {e.printStackTrace();}}// 3. 公共静态方法提供全局访问点public static synchronized DatabaseConnectionPool getInstance() {if (instance null) {instance new DatabaseConnectionPool();}return instance;}// 4. 获取数据库连接public synchronized Connection getConnection() {if (connectionPool.isEmpty()) {throw new RuntimeException(No available connections in the pool.);}return connectionPool.remove(0);}// 5. 释放数据库连接public synchronized void releaseConnection(Connection connection) {connectionPool.add(connection);}
}使用场景
public class Application {public static void main(String[] args) {// 获取数据库连接池的单例实例DatabaseConnectionPool connectionPool DatabaseConnectionPool.getInstance();// 获取连接Connection connection connectionPool.getConnection();// 执行数据库操作try {// 模拟数据库操作System.out.println(Executing query...);} finally {// 释放连接connectionPool.releaseConnection(connection);}}
}单例模式的核心思想是 确保一个类只有一个实例并提供全局访问点从而避免资源浪费和提高性能。