工厂模式之简单工厂模式

目录

工厂模式概念

工厂模式优点

        ①解耦

        ②可复用

        ③易于扩展

        ④更符合面向对象的设计原则

工厂模式的分类

        ①简单工厂

        ②工厂方法

        ③抽象工厂          

简单工厂概念

简单工厂优缺点

        优点

        缺点

简单工厂代码实现


工厂模式概念

        工厂模式(Factory Pattern)属于创建型设计模式。提供一个创建对象的接口,在创建对象时,不会直接在客户端代码中实例化,而是通过调用接口来创建对象。

        其主要目的是封装和管理类的创建(即将对象的创建和使用分离),使客户端代码和具体对象创建过程解耦。降低代码复杂性,同时也方便对对象创建逻辑的修改和扩展。

        其本质是对获取对象过程的抽象。

工厂模式优点

        ①解耦

                对象创建和使用分离,使客户端代码和具体对象创建过程解耦。客户端只需要知道工厂的接口和抽象产品的接口,而无需知道具体实现类

        ②可复用

                可通过工厂模式提高对象创建代码的复用性,减少代码重复量。

        ③易于扩展

                添加新产品类时,只需扩展到具体产品具体工厂,不需修改已有代码,符合开闭原则。

        ④更符合面向对象的设计原则

                通过工厂模式,将对象创建封装在工厂类中,使系统更符合单一职责原则

工厂模式的分类

        ①简单工厂

                由一个工厂类负责创建所有的对象,客户端通过传递不同的参数给工厂方法来指定要创建的具体对象。

        ②工厂方法

                每个具体对象类都对应一个工厂类,客户端通过调用具体工厂类的方法来创建对象。

        ③抽象工厂          

                提供一个接口或抽象类,声明了一组用于创建一系列相关或相互依赖对象的工厂方法,具体的工厂类实现这些工厂方法来创建不同的对象族。

简单工厂概念

        简单来说就是,只有一个工厂,可生产同一产品下不同型号的产品,客户端通过不同参数指定创建具体对象(比亚迪→汉唐宋元,客户买车)。它也被称为静态工厂方法模式。

简单工厂优缺点

        优点

                1.解耦

                2.可复用

                3.易于扩展

        缺点

                1.违反单一职责原则

                2.不符合开闭原则

                3.不易于扩展和维护

简单工厂代码实现

#include <iostream>
using namespace std;
 
// 定义一个抽象的产品类
class Product {
public:
    virtual void run() = 0;
    virtual ~Product() {}
};

//具体的产品类A
class ConcreteProductA : public Product {
public:
    void run() override {
        cout<<"Product A"<<endl;
    }
};

//具体的产品类B
class ConcreteProductB : public Product {
public:
    void run() override {
       cout<<"Product B"<<endl;
    }
};

//简单工厂
class Factory {
public:
    //根据传入参数创建相应的产品实例
    static Product* createProduct(const std::string& type) {
        if (type == "A") {
            return new ConcreteProductA();
        } else if (type == "B") {
            return new ConcreteProductB();
        }
        return nullptr;
    }
};
int main() {
    
    Product* productA = Factory::createProduct("A");
    productA->run();
    
    Product* productB = Factory::createProduct("B");
    productB->run();
    
    delete productA;
    delete productB;
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值