PDA

View Full Version : Singleton Pattern



nmhung
18-03-2011, 08:12 AM
Singleton Pattern

Đôi khi, bạn phải giải quyết trường hợp làm thế nào để khởi tạo duy nhất 1 và chỉ 1 đối tượng dẫn xuất từ một lớp.

Singleton pattern sẽ giải quyết vấn đề này. Nó là 1 design pattern đơn giản nhất bao gồm 1 lớp, lớp này đảm bảo sẽ khởi tạo chỉ một đối tượng và cung cấp khả năng truy xuất mức Global tới đối tượng đó. Có nghĩa là đối tượng có thể được sử dụng ở bất kỳ nơi nào trong ứng dụng mà không cần phải khởi tạo Contructor.

Mục tiêu

- Đảm bảo chỉ một đối tượng được khởi tạo từ lớp
- Cung cấp khả năng truy xuất mức Global (global point of access) tới đối tượng đó.

Singleton Class bao gồm :
-Static member
-Private Constructor
-Và một public static method (method này sẽ reference (trỏ) đến Static member ở trên.



class Singleton
{
private static Singleton m_instance;
private Singleton()
{
...
}

public static synchronized Singleton getInstance()
{
if (m_instance == null)
m_instance = new Singleton();

return m_instance;
}
...
public void doSomething()
{
...
}
}


rong đoạn mã trên, phương thức getInstance() đảm bảo rằng chỉ duy nhất một đối tượng dẫn xuất từ lớp Singleton được khởi tạo. Contructor (được overide thành private) chỉ được truy xuất bên trong lớp Singleton, điều này đảm bảo rằng phương thức getInstance() là điểm duy nhất có thể khởi tạo đối tượng.

Thêm vào đó, getInstance() cung cấp global point of access đến đối tượng. Bạn có thể sử dụng theo cách dưới đây:


Singleton.getInstance().doSomething();


Vậy câu hỏi là vì sao ta ko dùng static ?