Maison >Java >javaDidacticiel >Refactoring - Remplacer Singleton
Se libérer du mal Singleton
TL;DR : Refactoriser les singletons pour réduire le couplage
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] Semi-automatique
Cette refactorisation est sûre lorsque vous mettez à jour toutes les références au singleton et gérez correctement ses dépendances.
Tester chaque étape garantit qu'aucune référence au singleton n'est manquée.
La refactorisation à partir d'un singleton rend le code plus modulaire, testable et moins sujet aux problèmes causés par l'état global.
L'injection de dépendances vous permet de remplacer facilement DatabaseConnection par une implémentation fictive ou différente dans les tests et dans d'autres contextes.
Image de PublicDomainPictures de Pixabay
Cet article fait partie de la série Refactoring.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!