1、工厂方法模式(Factory Method)

一种创建型设计模式,它提供了一个接口用于创建对象,但由子类决定实例化哪一个类。该模式将对象的创建过程封装在一个工厂类中,从而将对象的实例化与使用分离,增加了系统的灵活性和可扩展性。

主要组成部分:
产品接口:定义工厂方法所创建的对象的接口。
具体产品:实现产品接口的具体类。
工厂接口:声明一个工厂方法,用于创建产品对象。
具体工厂:实现工厂接口,重写工厂方法以返回具体产品的实例。
优点:
解耦:客户端代码无需关心具体的产品类,可以通过工厂接口获取对象。
灵活性:可以通过扩展新的工厂和产品类来增加新功能,而无需修改现有代码。

//g++ -o test main.cpp
#include <iostream>

// 产品接口
class Product {
public:
    virtual void use() = 0;
};

// 具体产品
class ConcreteProductA : public Product {
public:
    void use() override {
        // 使用具体产品A的逻辑
	std::cout << "A" << std::endl;
    }
};

class ConcreteProductB : public Product {
public:
    void use() override {
        // 使用具体产品B的逻辑
	std::cout << "B" << std::endl;
    }
};

// 工厂接口
class Factory {
public:
    virtual Product* createProduct() = 0;
};

// 具体工厂
class ConcreteFactoryA : public Factory {
public:
    Product* createProduct() override {
        return new ConcreteProductA();
    }
};

class ConcreteFactoryB : public Factory {
public:
    Product* createProduct() override {
        return new ConcreteProductB();
    }
};

// 客户端代码
void clientCode(Factory& factory) {
    Product* product = factory.createProduct();
    product->use();
    delete product;
}

int main() {
    ConcreteFactoryA concreteFactoryA;
    ConcreteFactoryB concreteFactoryB;

    clientCode(concreteFactoryA); // 输出:
    clientCode(concreteFactoryB); // 输出:

    return 0;
}

通过工厂方法模式,客户端代码能够灵活地创建不同的产品,而无需直接依赖具体的产品类。
工厂方法模式的应用场景非常广泛,以下是一些常见的应用场景:

具体应用示例:
图形界面库:在图形界面库中,不同平台(如 Windows、Linux、Mac)可能有不同的窗口实现,可以为每个平台定义一个工厂,创建相应的窗口对象。
游戏开发:在游戏中,根据不同的关卡或游戏状态创建不同的角色或物品。工厂方法模式可以根据当前状态动态生成相应的游戏对象。
数据访问层:在数据访问层中,可以根据不同的数据源(如 MySQL、PostgreSQL)创建不同的数据访问对象,使用工厂方法模式来封装这些对象的创建逻辑。
通过使用工厂方法模式,开发者能够创建更灵活、可扩展的代码结构,减少对具体实现的依赖,从而提升代码的可维护性和可读性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值