Tổng số lượt xem trang

Thứ Năm, 9 tháng 6, 2011

Design Patterns - Singleton Pattern


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;
}

2 nhận xét:

  1. 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óa