Không sử dụng singleton.
Cụ thể, sự khác biệt duy nhất giữa một biến đơn và biến toàn cầu là singleton cố gắng thực thi một cá thể đơn lẻ (ví dụ như tạo hàm tạo riêng).
Thay vào đó, hãy đặt hàm tạo công khai và viết kiểm tra bằng các phiên bản mới. Trong chương trình thực tế của bạn, hãy sử dụng getInstance()
để có được cá thể chung toàn cầu (hoặc sử dụng một thùng chứa IOC).
Và hãy nhớ rằng singletons are pathological liars.
Nếu bạn vẫn còn quá thoải mái với ý tưởng về Singleton, thay vì đặt công khai hàm tạo, bạn có thể thêm phương thức nhà máy công cộng (và tĩnh) để tạo các cá thể theo cách không thể sử dụng do tai nạn, ví dụ:
public static MyClass TEST_CreateInstance() {
return new MyClass();
}
-1, IMO điều này làm cho tình huống xấu trở nên tồi tệ hơn – orip
+1 để đưa ra giải pháp thực tế. Tôi không có quyền kiểm soát mã của bên thứ ba, đó là một singleton, và có một nhu cầu cho các giải pháp, không nên làm thế nào nó nên được thực hiện. – eis