Singleton Pattern
Ý nghĩa: đảm bảo 1 lớp chỉ có thể tạo được 1 đối tượng duy nhất.
Áp dụng thực tế: 1 số chương trình luôn được chạy duy nhất 1 lần như VietKey, Run…
Giải pháp: để PTTL ở thuộc tính private (hoặc protected) , thay vào đó việc tạo đối tượng có điều kiện được xử lý bằng 1 hàm thành viên static truy xuất 1 con trỏ static. Và chính con trỏ static này sẽ trỏ tới đối tượng duy nhất của lớp.
Minh họa:
#include<iostream.h>
class Singleton{private:static Singleton* pObj;protected:Singleton();public:static Singleton* pObject();};
Singleton* Singleton::pObj=NULL;
Singleton::Singleton(){cout<<"Singleton constructor..."<<endl;}
Singleton* Singleton::pObject(){if(pObj==NULL)pObj=new Singleton;return pObj;}
void main(){Singleton* p1 = Singleton::pObject();Singleton* p2 = Singleton::pObject();if(p1==p2)cout<<"The same object."<<endl;}
Singleton không phải là để "chương trình luôn được chạy duy nhất 1 lần" đâu bạn. Mỗi chương trình khi chạy là tạo 1 process riêng vì thế đối tượng Singleton của 1 process chả liên quan gì đến process kia cả. Singleton chỉ là để thiết kế class mà không cần tạo nhiều thể hiện của 1 đối tượng như: logging, thread pools...
Trả lờiXóaUhm, thks for share.
Trả lờiXóa