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

Bài viết này sẽ trình bày về Factory Pattern trong C++, một mẫu thiết kế phổ biến giúp tạo ra các đối tượng mà không cần chỉ định rõ lớp cụ thể của đối tượng đó. Điều này giúp tăng tính linh hoạt và khả năng mở rộng cho mã nguồn.

Factory Pattern là một mẫu thiết kế giúp tách biệt quá trình tạo đối tượng khỏi việc sử dụng đối tượng đó. Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách sử dụng Factory Pattern để tạo ra các đối tượng khác nhau thông qua một lớp factory.

Mã C++

#include <iostream>
#include <memory>
#include <string>

// Interface cho sản phẩm
class Shape {
public:
    virtual void draw() = 0; // Phương thức thuần ảo
    virtual ~Shape() {}
};

// Lớp sản phẩm cụ thể: Circle
class Circle : public Shape {
public:
    void draw() override {
        std::cout << "Vẽ hình tròn." << std::endl;
    }
};

// Lớp sản phẩm cụ thể: Square
class Square : public Shape {
public:
    void draw() override {
        std::cout << "Vẽ hình vuông." << std::endl;
    }
};

// Lớp Factory
class ShapeFactory {
public:
    // Phương thức tạo hình
    std::unique_ptr<Shape> createShape(const std::string& shapeType) {
        if (shapeType == "Circle") {
            return std::make_unique<Circle>();
        } else if (shapeType == "Square") {
            return std::make_unique<Square>();
        }
        return nullptr; // Nếu không tìm thấy loại hình
    }
};

int main() {
    ShapeFactory shapeFactory;

    // Tạo hình tròn
    auto shape1 = shapeFactory.createShape("Circle");
    shape1->draw();

    // Tạo hình vuông
    auto shape2 = shapeFactory.createShape("Square");
    shape2->draw();

    return 0;
}

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

  • Interface Shape: Định nghĩa phương thức draw() mà các hình dạng sẽ triển khai.
  • Lớp CircleSquare: Kế thừa từ Shape, cung cấp triển khai cho phương thức draw().
  • Lớp ShapeFactory: Chứa phương thức createShape(), nhận vào loại hình dạng và trả về đối tượng tương ứng.
  • Trong hàm main(): Sử dụng ShapeFactory để tạo ra các hình dạng cụ thể và gọi phương thức draw() của chúng.

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

  • Trình biên dịch C++ hỗ trợ C++11 trở lên.

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

Chương trình này không yêu cầu cài đặt thư viện bên ngoài. Bạn chỉ cần một trình biên dịch C++ như g++.

Lời khuyên:

  • Factory Pattern rất hữu ích trong các ứng dụng lớn nơi việc tạo đối tượng phức tạp có thể làm cho mã trở nên khó bảo trì. Hãy sử dụng mẫu thiết kế này khi bạn cần tạo nhiều loại đối tượng khác nhau mà không muốn bị ràng buộc vào lớp cụ thể.


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

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ập nhật dữ liệu trong MySQL bằng C++

Hướng dẫn cách cập nhật dữ liệu trong MySQL bằng C++ sử dụng Prepared Statements để đảm bảo an toàn và hiệu suất khi tương tác với cơ sở dữ liệu. Bài viết cung cấp một ví dụ minh họa dễ hiểu.
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.
Cách truyền Authentication Header Token khi POST dữ liệu tới API bằng Node.js

Hướng dẫn chi tiết cách truyền Authentication Token trong phần header khi POST dữ liệu tới API sử dụng Node.js. Bài viết sẽ chỉ ra cách sử dụng gói `axios` hoặc `http` để thực hiện các yêu cầu HTTP có xác thực.
Phòng chống XSS (Cross-site Scripting) bằng C++

Hướng dẫn các kỹ thuật phòng chống XSS (Cross-site Scripting) trong ứng dụng C++, giúp bảo vệ ứng dụng web khỏi các cuộc tấn công bằng cách kiểm soát và mã hóa dữ liệu đầu vào. Bài viết này cung cấp các phương pháp và ví dụ minh họa để tăng cường bảo mật.
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.
Xác thực JSON Web Token (JWT) với C++

Bài viết này sẽ hướng dẫn cách sử dụng JSON Web Token (JWT) trong C++ để xác thực người dùng, bao gồm các bước tạo và xác minh token với các thư viện C++ phổ biến.
Ví dụ về lập trình hướng đối tượng (OOP) trong C++

Bài viết này cung cấp ví dụ minh họa về lập trình hướng đối tượng (OOP) trong C++, bao gồm các khái niệm như lớp, đối tượng, kế thừa và đa hình.
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.
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ả.

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