首页 >Java >java教程 >重构——替换单例

重构——替换单例

Barbara Streisand
Barbara Streisand原创
2024-11-26 09:23:09963浏览

摆脱邪恶的单身人士

TL;DR:重构单例以减少耦合

解决的问题

  • 高耦合
  • 难以测试
  • 多线程问题

相关代码异味

Refactoring  - Replace Singleton

代码气味 32 - 单例

马克西·孔蒂耶里 ・ 2020 年 11 月 23 日

#codenewbie #教程 #webdev #编程
Refactoring  - Replace Singleton

代码气味 22 - 助手

马克西·孔蒂耶里 ・ 十一月 12 '20

#哎呀 #助手 #codenewbie #初学者
Refactoring  - Replace Singleton

代码气味 25 - 模式滥用者

马克西·孔蒂耶里 ・2020 年 11 月 15 日

#哎呀 #教程 #编程 #模式

步骤

  1. 识别单例
  2. 找到对其getInstance()方法
  3. 的所有引用
  4. 将单例重构为标准类
  5. 将其作为依赖项注入

示例代码

public class DatabaseConnection {
    private static DatabaseConnection instance;

    private DatabaseConnection() {}

    public static DatabaseConnection getInstance() {
        if (instance == null) {
            instance = new DatabaseConnection();
        }
        return instance;
    }

    public void connect() { 
    }
}

public class Service {
    public void performTask() {
        DatabaseConnection connection = DatabaseConnection.getInstance();
        connection.connect(); 
    }
}

public class DatabaseConnection {  
    // 1. Identify the singleton 
    public void connect() { 
    }
}

public class Service {
    // 2. Locate all references to its getInstance() method.
    private DatabaseConnection connection;

    // 3. Refactor the singleton to a standard class. 
    public Service(DatabaseConnection connection) {
        // 4. Inject it as a dependency.
        this.connection = connection;
    }

    public void performTask() {
        connection.connect(); 
    }
}

DatabaseConnection connection = new DatabaseConnection();
// You can also mock the connection in your tests

Service service = new Service(connection);
service.performTask();

类型

[X] 半自动

安全

当您更新对单例的所有引用并正确处理其依赖项时,此重构是安全的。

测试每个步骤可确保不会遗漏对单例的引用。

为什么代码更好?

远离单例的重构使代码更加模块化、可测试,并且不太容易出现由全局状态引起的问题。

注入依赖项使您可以在测试和其他上下文中轻松地将 DatabaseConnection 替换为模拟或不同的实现。

标签

  • 耦合

相关重构

Refactoring  - Replace Singleton

重构 007 - 提取类

马克西·孔蒂耶里 ・ 22 年 7 月 4 日

#webdev #初学者 #javascript #教程

参见

Refactoring  - Replace Singleton

辛格尔顿:万恶之源

马克西·孔蒂耶里 ・2020 年 11 月 17 日

#哎呀 #教程 #codenewbie #编程
Refactoring  - Replace Singleton

耦合:唯一的软件设计问题

马克西·康泰里 ・ 2021 年 2 月 6 日

#webdev #编程 #哎呀 #教程

制作人员

图片由 PublicDomainPictures 在 Pixabay上


本文是重构系列的一部分。

Refactoring  - Replace Singleton

如何通过简单的重构来改进代码

马克西·孔蒂耶里 ・ 2022 年 10 月 24 日

#webdev #初学者 #编程 #教程

以上是重构——替换单例的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn