前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >单例模式在图书管理系统中的简单应用

单例模式在图书管理系统中的简单应用

作者头像
GeekLiHua
发布2025-01-21 16:49:59
发布2025-01-21 16:49:59
6900
代码可运行
举报
文章被收录于专栏:JavaJava
运行总次数:0
代码可运行

单例模式在图书管理系统中的简单应用

本文讲解,设计模式中最简单的单例模式在,图书管理系统中的简单应用。

对于静态同步方法可以查看这篇文章:Java中的静态同步方法

单例模式简介

当你在开发Spring Boot项目时,可以使用单例模式来优化代码。下面是几个如何在Spring Boot中实现单例模式的示例。

1. 饿汉式单例模式

饿汉式单例模式指在程序启动时就创建一个静态对象,并将其作为单例实例使用。这种方式简单直接,但存在一定的内存浪费。

代码语言:javascript
代码运行次数:0
复制
@Component
public class SingletonClass {
    private static final SingletonClass instance = new SingletonClass();
    
    private SingletonClass() { }
    
    public SingletonClass getInstance() {
        return instance;
    }
}
2. 懒汉式单例模式

懒汉式单例模式指在第一次请求对象时再创建对象,避免了内存浪费,但需要使用同步锁解决线程安全问题。

代码语言:javascript
代码运行次数:0
复制
@Component
public class SingletonClass {
    private static SingletonClass instance;
    
    private SingletonClass() { }
    
    public synchronized SingletonClass getInstance() {
        if (instance == null) {
            instance = new SingletonClass();
        }
        return instance;
    }
}
3. 枚举类型单例模式

枚举类型单例模式是一种方便、高效、线程安全的单例模式实现方式,在Java 5之后才支持。

代码语言:javascript
代码运行次数:0
复制
@Component
public enum SingletonClass {
    INSTANCE;
    
    public void doSomething() {
        // TODO: Implementation goes here...
    }
}

具体案例

数据库
代码语言:javascript
代码运行次数:0
复制
-- ----------------------------
-- Table structure for book
-- ----------------------------
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book`  (
  `isbn` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `author` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `publisher` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `pubdate` datetime NOT NULL,
  `price` decimal(10, 2) NOT NULL,
  `id` int NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`, `isbn`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Records of book
-- ----------------------------
INSERT INTO `book` VALUES ('9780439227148', 'The Call of the Wild', 'Jack London', 'Scholastic Press', '2001-01-01 00:00:00', 39.40, 1);
INSERT INTO `book` VALUES ('9787501592401', 'The Old Man and the Sea', 'Ernest Hemingway', 'Knowledge Press', '2023-01-30 00:00:00', 25.80, 2);
INSERT INTO `book` VALUES ('9787501592401', 'The Old Man and the Sea', 'Ernest Hemingway', 'Knowledge Press', '2023-01-31 13:02:42', 25.80, 3);
INSERT INTO `book` VALUES ('9780439227148', 'The Call of the Wild', 'Jack London', 'Scholastic Press', '2023-01-30 16:00:00', 34.90, 6);
INSERT INTO `book` VALUES ('9781772262902', 'Oliver Twist', 'Charles Dickens', 'Engage Books', '2023-01-03 16:00:00', 45.00, 7);
具体代码

下面代码演示单例模式在图书管理系统中的应用。

代码语言:javascript
代码运行次数:0
复制
@Service
public class BookServiceImpl extends ServiceImpl<BookMapper, Book> implements BookService {
    
    // 单例模式
    private static BookServiceImpl instance;
    
    // 私有空参构造方法
    private BookServiceImpl() { }
    
    // 静态同步方法,确保线程安全同时实现懒汉式单例
    public synchronized static BookServiceImpl getInstance() {
        if (instance == null) {
            instance = new BookServiceImpl();
        }
        return instance;
    }
      
    @Override
    public List<Book> listAll() {
        // 调用基类提供的list()方法获取所有书籍列表
        return this.list();
    }

}

在这里,我们使用了懒汉式单例模式来确保只有一个BookServiceImpl对象存在。这通过在类上定义一个static变量instance、设定私有的空参构造函数和实现getInstance()方法来实现。

当第一次调用getInstance()方法时,会检查static变量instance是否为空。如果为空,就创建一个新的BookServiceImpl对象,并将其赋给instance,然后返回这个新创建的对象。如果不为空,直接返回已有的对象,从而实现单例模式。在多线程情况下,通过添加synchronized关键字,可以确保getInstance()方法的线程安全性。

在本例中,我们对服务实现层进行优化,使其每次访问数据库时只需要使用同一个对象,避免了多次创建和销毁对象的开销。

除了使用单例模式,我们还继承了Mybatis Plus提供的IService接口,这使得服务层实现能够快速地进行数据访问和管理。例如,在本例中,我们可以通过调用基类中提供的list()方法轻松地获取数据库中所有书籍的列表。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 单例模式在图书管理系统中的简单应用
    • 单例模式简介
      • 1. 饿汉式单例模式
      • 2. 懒汉式单例模式
      • 3. 枚举类型单例模式
    • 具体案例
      • 数据库
      • 具体代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档