软件开发经典设计模式:创建型-工厂模式

工厂模式(工厂方法和抽象工厂)

        工厂模式(Factory Pattern)是创建型设计模式之一,旨在提供创建对象的接口,而无需显式指定创建对象的类。这种模式在面向对象编程中非常有用,特别是在需要处理不同类型但实现相似接口的对象时。

        工厂模式的核心思想是使用工厂类或方法来封装对象创建的过程,有助于提高代码的灵活性和可维护性。

分类:

        简单工厂模式(不是标准的 GoF 设计模式):用于创建对象的简单工厂类,用一个方法根据输入的参数返回特定类型的实例。

        工厂方法模式:每个对象都有一个工厂方法接口,通过子类实现不同产品的创建,各子类决定实例化哪种产品。

        抽象工厂模式:提供一个接口用于创建一系列相关或相互依赖的对象,无需指定具体类。

#include <iostream>
#include <memory>

// 产品基类
class Product {
public:
    virtual void use() const = 0;
    virtual ~Product() = default;
};

// 具体产品 A
class ConcreteProductA : public Product {
public:
    void use() const override {
        std::cout << "Using Concrete Product A" << std::endl;
    }
};

// 具体产品 B
class ConcreteProductB : public Product {
public:
    void use() const override {
        std::cout << "Using Concrete Product B" << std::endl;
    }
};

// 工厂基类
class Creator {
public:
    virtual std::unique_ptr<Product> factoryMethod() const = 0;
    virtual ~Creator() = default;

    void someOperation() const {
        // 调用工厂方法创建产品对象
        std::unique_ptr<Product> product = factoryMethod();
        product->use();
    }
};

// 具体工厂 A
class ConcreteCreatorA : public Creator {
public:
    std::unique_ptr<Product> factoryMethod() const override {
        return std::make_unique<ConcreteProductA>();
    }
};

// 具体工厂 B
class ConcreteCreatorB : public Creator {
public:
    std::unique_ptr<Product> factoryMethod() const override {
        return std::make_unique<ConcreteProductB>();
    }
};

int main() {
    std::unique_ptr<Creator> creatorA = std::make_unique<ConcreteCreatorA>();
    creatorA->someOperation();

    std::unique_ptr<Creator> creatorB = std::make_unique<ConcreteCreatorB>();
    creatorB->someOperation();

    return 0;
}

特点

  1. 解耦创建和使用:客户端不需要知道具体类名,只需要对应的工厂对象(接口),减少耦合。

  2. 扩展性强:当增加新产品时,只需添加新的工厂类及产品类即可,而不需要修改现有代码,遵循了开放/封闭原则。

  3. 易于管理复杂对象创建逻辑:提供一种创建对象的集中管理方式,可以在工厂中插入各种逻辑(如缓存、日志、安全验证等)。

场景

  1. 对象创建的逻辑复杂:当对象的创建过程较复杂且需要许多条件或参数时,工厂模式更能解决问题。

  2. 系统不希望依赖具体类:如果您希望系统独立于它创建的对象的实现,以支持创建不同对象的可能。

  3. 需要创建多个相关产品对象:采用抽象工厂模式来处理,这些对象可能必须共同使用。

工厂模式是权衡灵活性和可维护性的一种优雅设计方案,适用于许多面向对象软件开发的场景。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值