Ví dụ về Singleton Pattern trong C++

Bài viết này giới thiệu về Singleton Pattern trong C++, bao gồm cách triển khai và ứng dụng của nó trong việc quản lý đối tượng. Singleton Pattern đảm bảo rằng một lớp chỉ có một thể hiện duy nhất và cung cấp một điểm truy cập toàn cục cho nó.

Singleton Pattern là một trong những mẫu thiết kế phổ biến nhất trong lập trình hướng đối tượng. Mẫu này đảm bảo rằng một lớp chỉ có một thể hiện duy nhất và cung cấp một phương thức để truy cập đối tượng đó. Bài viết này sẽ trình bày cách triển khai Singleton Pattern trong C++ với ví dụ cụ thể.

Mã C++

#include <iostream>
#include <mutex>

class Singleton {
private:
    static Singleton* instance; // Con trỏ tới thể hiện duy nhất
    static std::mutex mtx; // Mutex để đảm bảo an toàn trong đa luồng

    // Constructor riêng tư
    Singleton() {
        std::cout << "Constructor gọi" << std::endl;
    }

public:
    // Phương thức để truy cập thể hiện duy nhất
    static Singleton* getInstance() {
        if (instance == nullptr) {
            std::lock_guard<std::mutex> lock(mtx); // Đảm bảo an toàn cho đa luồng
            if (instance == nullptr) {
                instance = new Singleton();
            }
        }
        return instance;
    }

    // Phương thức mẫu
    void someBusinessLogic() {
        std::cout << "Xử lý logic kinh doanh" << std::endl;
    }
};

// Khởi tạo giá trị con trỏ
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;

int main() {
    // Lấy thể hiện của Singleton và thực hiện một số logic
    Singleton* singleton = Singleton::getInstance();
    singleton->someBusinessLogic();

    return 0;
}

Giải thích chi tiết từng dòng code

  • static Singleton* instance: Con trỏ tĩnh giữ thể hiện duy nhất của lớp Singleton.
  • static std::mutex mtx: Mutex để đảm bảo rằng các luồng không truy cập đồng thời vào phương thức getInstance().
  • Singleton(): Constructor riêng tư để ngăn không cho đối tượng được tạo bên ngoài lớp.
  • static Singleton* getInstance(): Phương thức tĩnh để truy cập thể hiện duy nhất. Kiểm tra xem thể hiện đã được tạo hay chưa và tạo nếu cần.
  • std::lock_guard<std::mutex> lock(mtx): Đảm bảo an toàn trong môi trường đa luồng khi kiểm tra và tạo thể hiện.
  • someBusinessLogic(): Một phương thức ví dụ trong lớp Singleton.

Yêu cầu hệ thống:

  • C++11 trở lên (để sử dụng std::mutexstd::lock_guard)

Cách cài đặt các thư viện để chạy được đoạn mã C++ trên:

Đoạn mã trên không yêu cầu thư viện bên ngoài nào. Bạn chỉ cần biên dịch bằng trình biên dịch hỗ trợ C++11.

Lời khuyên:

  • Singleton Pattern rất hữu ích khi bạn cần một đối tượng duy nhất, như một trình quản lý kết nối cơ sở dữ liệu hoặc một cấu hình toàn cục.
  • Hãy cẩn thận khi sử dụng Singleton trong môi trường đa luồng để tránh các vấn đề về an toàn dữ liệu.


Các Hướng Dẫn Cùng Chủ Đề Đang Xem

Phân trang kết quả truy vấn MySQL bằng C++

Hướng dẫn chi tiết cách phân trang kết quả truy vấn MySQL bằng C++ với Prepared Statements. Bài viết giúp bạn hiểu cách truy vấn dữ liệu và phân trang hiệu quả trong C++ khi làm việc với MySQL.
Cách tự động đăng nhập vào website sử dụng Selenium với Chrome trong C++

Hướng dẫn cách sử dụng Selenium với ChromeDriver trong C++ để tự động đăng nhập vào một trang web. Bài viết sẽ giải thích cách cấu hình Selenium và ChromeDriver cũng như các bước đăng nhập vào một trang cụ thể.
Cách truyền Authentication Header Token khi POST dữ liệu tới API bằng C++

Hướng dẫn cách truyền token xác thực thông qua Authentication Header khi gửi yêu cầu POST dữ liệu tới API bằng ngôn ngữ C++. Sử dụng thư viện `libcurl` để thực hiện việc gửi yêu cầu HTTP với token xác thực.
Tạo watermark cho hình ảnh bằng C++

Hướng dẫn cách tạo watermark cho hình ảnh trong C++ bằng cách sử dụng thư viện OpenCV. Bài viết này giúp bạn hiểu cách thêm văn bản hoặc hình ảnh vào một bức ảnh để tạo ra watermark.
Chuyển chuỗi Markdown sang HTML bằng C++

Hướng dẫn chi tiết cách chuyển đổi chuỗi Markdown sang HTML bằng C++. Bài viết này sẽ giúp bạn nắm bắt cách sử dụng thư viện Markdown để thực hiện việc chuyển đổi một cách dễ dàng và hiệu quả.
Sử dụng Selenium trong C++ để gửi đoạn mã JavaScript vào website trên Chrome

Hướng dẫn cách sử dụng Selenium trong C++ để gửi đoạn mã JavaScript vào một website thông qua trình duyệt Chrome. Bài viết sẽ hướng dẫn cách cài đặt và viết mã để thực hiện điều này.
Tạo thumbnail cho hình ảnh bằng C++

Hướng dẫn chi tiết cách tạo thumbnail cho hình ảnh trong C++ bằng thư viện OpenCV. Bài viết này sẽ giúp bạn hiểu cách xử lý hình ảnh, thực hiện việc thay đổi kích thước để tạo hình thu nhỏ một cách dễ dàng.
Tạo ứng dụng chat đơn giản sử dụng Socket.IO trong C++

Hướng dẫn cách tạo một ứng dụng chat đơn giản bằng C++ sử dụng Socket.IO, giúp bạn hiểu rõ hơn về lập trình mạng và giao tiếp thời gian thực.
Cách gửi POST dữ liệu tới API bằng C++ sử dụng thư viện libcurl

Hướng dẫn cách gửi dữ liệu đến API bằng phương thức POST trong C++ sử dụng thư viện libcurl. Bài viết sẽ giúp bạn hiểu cách cấu hình và gửi các yêu cầu HTTP POST đến một API RESTful.
Các chức năng thường dùng khi sử dụng Selenium Chrome trong C++

Bài viết này sẽ liệt kê các chức năng thường được sử dụng khi làm việc với Selenium Chrome trong C++, giúp người đọc nắm bắt nhanh chóng các thao tác cần thiết cho việc tự động hóa trình duyệt.

Đã thêm vào giỏ hàng