Chỉnh sửa: Từ một câu hỏi khác, tôi đã cung cấp một câu trả lời có liên kết đến rất nhiều câu hỏi / câu trả lời về singletons: Thông tin thêm về singletons tại đây:
Vì vậy, tôi đã đọc chủ đề Singletons: thiết kế tốt hay một cái nạng?
Và cuộc cãi vã vẫn còn hoành hành.
Tôi thấy Singletons là một mẫu thiết kế (tốt và xấu).
Vấn đề với Singleton không phải là Mẫu mà là người dùng (xin lỗi mọi người). Mọi người và cha của họ nghĩ rằng họ có thể thực hiện một cách chính xác (và từ nhiều cuộc phỏng vấn tôi đã thực hiện, hầu hết mọi người không thể). Ngoài ra bởi vì mọi người nghĩ rằng họ có thể triển khai một Singleton chính xác, họ lạm dụng Mẫu và sử dụng nó trong các tình huống không phù hợp (thay thế các biến toàn cục bằng Singletons!).
Vì vậy, những câu hỏi chính cần được trả lời là:
- Khi nào bạn nên sử dụng Singleton
- Làm thế nào để bạn thực hiện một Singleton chính xác
Hy vọng của tôi cho bài viết này là chúng ta có thể thu thập cùng nhau ở một nơi (thay vì phải tìm kiếm trên google và tìm kiếm nhiều trang web) một nguồn có thẩm quyền khi nào (và sau đó làm thế nào) để sử dụng Singleton một cách chính xác. Cũng thích hợp sẽ là một danh sách các Chống sử dụng và các triển khai xấu phổ biến giải thích lý do tại sao chúng không hoạt động và để thực hiện tốt các điểm yếu của chúng.
Vì vậy, có được quả bóng lăn:
Tôi sẽ giơ tay lên và nói đây là những gì tôi sử dụng nhưng có lẽ có vấn đề.
Tôi thích cách xử lý "Scott Myers" của chủ đề trong cuốn sách "Hiệu quả C ++"
Các tình huống tốt để sử dụng Singletons (không nhiều):
- Ghi nhật ký khung
- Bể tái chế
/*
* C++ Singleton
* Limitation: Single Threaded Design
* See: http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf
* For problems associated with locking in multi threaded applications
*
* Limitation:
* If you use this Singleton (A) within a destructor of another Singleton (B)
* This Singleton (A) must be fully constructed before the constructor of (B)
* is called.
*/
class MySingleton
{
private:
// Private Constructor
MySingleton();
// Stop the compiler generating methods of copy the object
MySingleton(MySingleton const& copy); // Not Implemented
MySingleton& operator=(MySingleton const& copy); // Not Implemented
public:
static MySingleton& getInstance()
{
// The only instance
// Guaranteed to be lazy initialized
// Guaranteed that it will be destroyed correctly
static MySingleton instance;
return instance;
}
};
ĐỒNG Ý. Cho phép nhận được một số lời chỉ trích và thực hiện khác cùng nhau.
:-)