Melepaskan Diri dari Singleton Jahat
TL;DR: Refactor singletons untuk mengurangkan gandingan
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] Separa Automatik
Pemfaktoran semula ini selamat apabila anda mengemas kini semua rujukan kepada singleton dan mengendalikan kebergantungannya dengan betul.
Menguji setiap langkah memastikan tiada rujukan kepada singleton terlepas.
Memfaktorkan semula daripada singleton menjadikan kod lebih modular, boleh diuji dan kurang terdedah kepada isu yang disebabkan oleh keadaan global.
Menyuntik kebergantungan membolehkan anda menggantikan DatabaseConnection dengan mudah dengan pelaksanaan olok-olok atau berbeza dalam ujian dan konteks lain.
Imej oleh PublicDomainPictures daripada Pixabay
Artikel ini adalah sebahagian daripada Siri Pemfaktoran Semula.
Atas ialah kandungan terperinci Pemfaktoran semula - Gantikan Singleton. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!