首頁 > Java > java教程 > 主體

重構——替換單例

Barbara Streisand
發布: 2024-11-26 09:23:09
原創
948 人瀏覽過

擺脫邪惡的單身人士

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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板