23种设计模式(一)简单工厂模式

目录

一、简单工厂

二、模式组成

三、创建方法及代码实现

1、创建一个抽象类

2、定义产品

3、创建工厂

4、调用工厂

本程序运行结果

四、优缺

优点

缺点

五、应用场景


一、简单工厂

        简单工厂模式是一种设计模式,属于创建型模式,也被称为静态工厂方法模式。这种模式由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的实例。简单工厂模式的核心是负责实现创建所有实例的内部逻辑。


二、模式组成

简单工厂模式由三部分组成:

组成关系作用
抽象产品(FactoryInterface)该类是父类、被子类(具体产品)所基础提供具体参品的公共接口
具体产品(Audi\Bmw\Benz)抽象产品的子类,工厂的目标产品的描述和实现
工厂(CarFactory)调用类根据需求,从而实例化出相应的产品


三、创建方法及代码实现

注:本程序使用,通过一个工厂,传递不同的名称,实现不同汽车的创建,汽车类中对汽车的创建并没有详细的描述,意为描述出简单工厂的大概模式。

1、创建一个抽象类

创建一个抽象类,为具体产品提供一个公共的接口class FactoryInterface {

class FactoryInterface {
public:
    virtual void print() = 0;
};

2、定义产品

定义出不同的产品类,该产品类继承共同的1种的抽象类

//奥迪工厂
class Audi:public FactoryInterface {
public:
    virtual void print() {
        std::cout << "Create Audi Factory" << std::endl;
    }
};

//宝马工厂
class Bmw :public FactoryInterface {
public:
    virtual void print() {
        std::cout << "Create Bmw Factory" << std::endl;
    }
};

//奔驰工厂
class Benz :public FactoryInterface {
public:
    virtual void print() {
        std::cout << "Create Benz Factory" << std::endl;
    }
};

3、创建工厂

创建工厂,根据不同的需求,创建出不同的产品。

//工厂类
class CarFactory {
public:
    static FactoryInterface* createCarFunc(std::string CarName) {
        if (CarName == "Audi") {
            return new Audi();
        }
        else if (CarName == "Bmw") {
            return new Bmw();
        }
        else {
            return new Benz();
        }
    }
};

4、调用工厂

通过主函数调用工厂,根据不同的参数,创建不同的产品。

int main()
{
    CarFactory *fty = new CarFactory();//创建工厂对象
    //根据抽象工厂创建汽车
    FactoryInterface* car;
    //指定工厂创建的汽车
    car = fty->createCarFunc("Audi");
    car->print();
    delete car;

    car = fty->createCarFunc("Bmw");
    car->print();
    delete car;
}

本程序运行结果

f1a449b425644c17b61737ff632eff5b.png

四、优缺

优点

  • 工厂类包含必要的判断逻辑,可以决定在声明时候创建哪一个产品实例,客户端可以免除直接创建产品对象的职责,
  • 简单工厂模式实现了对象的创建和使用的分离。
  • 只需要传递正确的参数,无需传递具体细节

缺点

  • 难以维护,工厂类职责过重,不方便维护
  • 使用简单工厂模式必然会增加系统中类的个数,增加了系统的复杂性
  • 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成无法形成基于继承的等级结构

五、应用场景

  • 工厂类负责创建的对象比较少,由于创建的对象比较少,不会造成工厂方法中的业务逻辑太复杂。
  • 只知道传入工厂类的参数,对于如何创建对象不关心。

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值