Xây dựng mẫu Singleton Template trong C++

From CodeForLife
Revision as of 17:30, 18 June 2017 by Thangdb (talk | contribs)
Jump to: navigation, search

Singleton là một mẫu thiết kế thông dụng nhất và được sử dụng thường xuyên để đảm bảo chỉ có một đối tượng duy nhất được tạo ra và có thể truy xuất mọi lúc, mọi nơi trong chương trình.

Để cài đặt một lớp Singleton đảm bảo đúng đặc tính của nó, bạn phải chú ý vấn đề sau:

  • Hàm khởi tạo (Constructor) và hàm hủy (Destructor) phải là Private => Việc này đảm bảo từ bên ngoài hoặc ở lớp kế thừa không thể khởi tạo được.
  • Trong lớp phải có hàm public static để khởi tạo đối tượng, thường người ta hay đặt tên hàm đó là GetInstance => Việc lấy đối tượng sẽ đều phải thông qua hàm này.

Việc tạo lớp Singleton rất đơn giản, nhưng ở bài viết này tôi muốn giới thiệu với các bạn xây dựng Singleton dạng Template để tối ưu code và sử dụng thêm SmartPoiter để tối ưu quản lý bộ nhớ trong Singleton.

  1. Cài đặt Singleton đơn giản
  2. Cài đặt Singleton dạng Template
  3. Kết hợp Singleton dạng Template với SmartPointer

1. Cài đặt Singleton đơn giản

Dưới đây là ví dụ cài đặt Singleton đơn giản cho lớp Manager:

Tệp Manager.h:

  1. ifndef MANAGER_H
    #define MANAGER_H

class Manager {
public:
    static Manager* GetInstance();
    
    void Manage();

private:
    Manager();
    virtual ~Manager();
    
    static Manager m_Instance;
};

  1. endif /* MANAGER_H */

 

 


 

2. Cài đặt Singleton dạng Template

 

3. Kết hợp Singleton dạng Template với SmartPointer