C++ 设计模式初探:简单工厂模式的实现与应用

简单工厂模式(Simple Factory Pattern)是设计模式中的一种创建型模式,主要用于创建对象时不需要指定具体类,而是通过一个共同的接口来指向新创建的对象。简单工厂模式让类的实例化延迟到子类中进行,通常用于创建一个或多个相互关联或依赖对象的家族,并且不需要指定具体类的情况下创建这些对象。

图片[1]_C++ 设计模式初探:简单工厂模式的实现与应用_知途无界

简单工厂模式的核心思想

  1. 定义一个接口:首先定义一个产品接口,用于规范产品的行为。
  2. 创建具体产品类:实现产品接口的具体产品类。
  3. 创建工厂类:包含一个静态方法,根据传入的信息生成对应类的实例。

简单工厂模式的结构

  • Product(抽象产品):定义了产品的接口,是工厂方法模式所创建的对象的超类型,也就是产品对象的共同接口。
  • ConcreteProduct(具体产品):实现了Product接口的具体产品。
  • Creator(工厂类):提供了创建产品的接口,调用者通过它访问具体产品的创建业务。

示例代码

假设我们要设计一个简单的日志系统,可以创建不同类型的日志记录器(如文件日志记录器、控制台日志记录器等)。

首先定义日志记录器的接口(Product):

#include <iostream>  
  
// 日志记录器的接口  
class Logger {  
public:  
    virtual ~Logger() {}  
    virtual void write(const std::string& message) = 0; // 抽象方法,用于写日志  
};  
  
// 文件日志记录器  
class FileLogger : public Logger {  
public:  
    void write(const std::string& message) override {  
        std::cout << "FileLogger: " << message << std::endl;  
    }  
};  
  
// 控制台日志记录器  
class ConsoleLogger : public Logger {  
public:  
    void write(const std::string& message) override {  
        std::cout << "ConsoleLogger: " << message << std::endl;  
    }  
};

接下来创建工厂类(Creator):

// 日志记录器工厂类  
class LoggerFactory {  
public:  
    static Logger* createLogger(const std::string& type) {  
        if (type == "file") {  
            return new FileLogger();  
        } else if (type == "console") {  
            return new ConsoleLogger();  
        }  
        return nullptr; // 如果传入的类型不是预期的,则返回nullptr  
    }  
};

最后,使用工厂类创建日志记录器对象并调用:

int main() {  
    Logger* logger1 = LoggerFactory::createLogger("file");  
    if (logger1) {  
        logger1->write("This is a file logger.");  
    }  
  
    Logger* logger2 = LoggerFactory::createLogger("console");  
    if (logger2) {  
        logger2->write("This is a console logger.");  
    }  
  
    // 清理资源  
    delete logger1;  
    delete logger2;  
  
    return 0;  
}

优点

  • 工厂类封装了对象的创建逻辑,使得客户端代码不需要关心对象的创建细节。
  • 当需要新增产品类型时,只需新增相应的具体产品类和在工厂类中添加相应的逻辑即可,符合开闭原则(对扩展开放,对修改关闭)。

缺点

  • 工厂类职责过重,一旦需要生产的产品类型较多时,会造成工厂类非常庞大。
  • 简单工厂模式不符合开闭原则,因为每增加一种产品,都需要修改工厂类的代码。尽管可以通过配置文件或数据库来避免修改代码,但这种方式会增加系统的复杂度和维护成本。

简单工厂模式适用于产品类型较少且不会有太大变化的情况。对于复杂系统,可能需要考虑使用工厂方法模式或抽象工厂模式。

© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞79 分享
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容