Singleton

Theo quyển Design Patterns (Gang of Four) thì Singleton là pattern cho phép class chỉ có duy nhất một instance. Đây cũng là một trong những pattern dễ hiểu, dễ hiện thực nhất. Khi nhắc đến Singleton thì mọi người cũng ngầm hiểu là Singleton với hiện thực như trong Gang of Four.

Tuy nhiên theo ý kiến chung là không nên dùng Singleton vì:

  • Khó thay đổi, mở rộng. Singleton dùng method static. Class con có thể hide method static, nhưng không thể override chúng.
  • Vi phạm nguyên tắc Explicit interface với các module dùng cùng một Singleton (tuy nhiên, đây không phải là luật).
  • Gây trở ngại cho unit test. Đây là hệ quả của lí do đầu tiên (xem nhanh).

Khi nào thì dùng Singleton? Bài viết này đề xuất:

  • Nếu tính chất “Singleton” không phải là bản chất của class, mà là do class dùng nó yêu cầu thế, thì tính duy nhất nên được hiện thực theo một cách độc lập, như Factory Method hay Dependency Injection.
  • Nếu tính chất “Singleton” là bản chất của class, xem xét việc dùng biến static để lưu trạng thái của instance (vẫn đem lại tính “duy nhất”), trước khi dùng đến phương pháp trong Gang of Four (vốn dùng cả method static).

Xem thêm Use your singletons wisely.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s