本文章属于专栏《设计模式(极简c++版)》
继续上一篇《设计原则》。本章简要说明工厂模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。
抽象工厂类代码示例:
- #include
- #include
-
- // 抽象产品 Bird
- class Bird {
- public:
- virtual void sound() = 0;
- virtual ~Bird() {} // 虚析构函数
- };
-
- // 具体产品 Sparrow
- class Sparrow : public Bird {
- public:
- void sound() override {
- std::cout << "Chirp chirp!" << std::endl;
- }
- };
-
- // 具体产品 Penguin
- class Penguin : public Bird {
- public:
- void sound() override {
- std::cout << "Squawk squawk!" << std::endl;
- }
- };
-
- // 抽象工厂 BirdFactory
- class BirdFactory {
- public:
- virtual std::unique_ptr
createBird() = 0; - virtual ~BirdFactory() {} // 虚析构函数
- };
-
- // 具体工厂 SparrowFactory
- class SparrowFactory : public BirdFactory {
- public:
- std::unique_ptr
createBird() override { - return std::unique_ptr
(new Sparrow()); - }
- };
-
- // 具体工厂 PenguinFactory
- class PenguinFactory : public BirdFactory {
- public:
- std::unique_ptr
createBird() override { - return std::unique_ptr
(new Penguin()); - }
- };
-
- int main() {
- // 使用 SparrowFactory 创建 Sparrow 实例
- std::unique_ptr
sparrowFactory(new SparrowFactory()) ; - std::unique_ptr
sparrow = sparrowFactory->createBird(); - sparrow->sound(); // 输出:Chirp chirp!
-
- // 使用 PenguinFactory 创建 Penguin 实例
- std::unique_ptr
penguinFactory(new PenguinFactory()) ; - std::unique_ptr
penguin = penguinFactory->createBird(); - penguin->sound(); // 输出:Squawk squawk!
-
- return 0;
- }