首页 > 其他分享 >创建型模式-工厂方法模式

创建型模式-工厂方法模式

时间:2023-11-10 14:33:22浏览次数:26  
标签:createCar 创建 模式 工厂 Car CarFactory public

1 什么是工厂方法模式

工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但将对象的实际创建延迟到子类中。这样,客户端代码使用工厂方法来创建对象,而不需要了解具体对象的创建细节,从而实现了对象的解耦和灵活性。
工厂方法模式的核心思想是将对象的创建和使用分开,通过一个抽象的工厂接口来定义对象的创建方法,具体的对象创建由子类工厂来实现。这样,当需要创建不同类型的对象时,只需添加新的工厂类即可,而不需要修改客户端使用的代码,符合开闭原则。

2 举个例子

假设我们正在开发一个汽车制造系统,其中有多个车型(如轿车、SUV、跑车等),每个车型都有不同的特点和构造过程。我们希望能够根据客户的需求来创建相应的车型对象。

首先,我们定义一个抽象的汽车接口 Car,其中包含了抽象的方法 drive:

class Car {
public:
    virtual void drive() = 0;
};

然后,我们创建多个具体的汽车类,它们实现了汽车接口,并各自实现了 drive 方法:

class SedanCar : public Car {
public:
    void drive() override {
        cout << "Driving sedan car..." << endl;
    }
};

class SUVCar : public Car {
public:
    void drive() override {
        cout << "Driving SUV car..." << endl;
    }
};

class SportsCar : public Car {
public:
    void drive() override {
        cout << "Driving sports car..." << endl;
    }
};

接下来,我们定义一个抽象的汽车工厂接口 CarFactory,其中包含了一个工厂方法 createCar:

class CarFactory {
public:
    virtual Car* createCar() = 0;
    virtual ~CarFactory() {}
};

然后,我们创建多个具体的汽车工厂类,它们实现了汽车工厂接口,分别负责创建相应的汽车对象:

class SedanCarFactory : public CarFactory {
public:
    Car* createCar() override {
        return new SedanCar();
    }
};

class SUVCarFactory : public CarFactory {
public:
    Car* createCar() override {
        return new SUVCar();
    }
};

class SportsCarFactory : public CarFactory {
public:
    Car* createCar() override {
        return new SportsCar();
    }
};

最后,在客户端代码中,根据客户的需求来创建相应的汽车对象,而不需要了解具体的汽车类和工厂类:

int main() {
    CarFactory* factory1 = new SedanCarFactory();
    Car* sedanCar = factory1->createCar();
    sedanCar->drive();

    CarFactory* factory2 = new SUVCarFactory();
    Car* suvCar = factory2->createCar();
    suvCar->drive();

    CarFactory* factory3 = new SportsCarFactory();
    Car* sportsCar = factory3->createCar();
    sportsCar->drive();

    delete sedanCar;
    delete suvCar;
    delete sportsCar;
    delete factory1;
    delete factory2;
    delete factory3;

    return 0;
}

在上述示例中,我们定义了抽象的汽车接口 Car 和具体的汽车类 SedanCar、SUVCar、SportsCar。同时,我们还定义了抽象的汽车工厂接口 CarFactory 和具体的汽车工厂类 SedanCarFactory、SUVCarFactory、SportsCarFactory。客户端代码根据客户的需求选择相应的工厂,并通过工厂的工厂方法来创建相应的汽车对象。

3 总结

通过工厂方法模式,我们将对象的创建和使用解耦,使得客户端代码只需和抽象的工厂接口打交道,而不需要关心具体的对象创建过程,从而增加了代码的灵活性和可维护性。

标签:createCar,创建,模式,工厂,Car,CarFactory,public
From: https://www.cnblogs.com/luoxiang/p/17824035.html

相关文章

  • 创建型模式-原型模式
    1什么是原型模式原型模式(PrototypePattern)是一种创建型设计模式,它允许通过克隆现有对象来创建新对象,而无需通过标准的构造函数来创建。原型模式适用于需要创建复杂对象的场景,同时又希望避免构造函数的开销。2举个例子举一个简单的例子来说明原型模式,假设我们有一个图形绘制......
  • 结构型模式-装饰模式
    1什么是装饰模式装饰模式(DecoratorPattern)是一种结构型设计模式,它允许将新功能动态地添加到对象中,通过将对象放入特殊的包装对象中,这样可以在不改变其接口的情况下,对对象的功能进行逐步扩展。在装饰模式中,通常包括以下几个角色:抽象构件(Component)、具体构件(ConcreteComponent)......
  • Vue - 创建 Vue3 项目
    Vue-创建Vue3项目 需搭建项目Vue3+ts+sass1. 创建项目npmcreatevite@latest  2. 安装依赖tyarn  3. 启动项目yarndev  4. 处理其他配置问题1) 打开HelloWorld.vue页面,发现一些报红,报错解决:找到tsconfig.json文件, ......
  • 结构型模式-桥接模式
    1什么是桥接模式桥接模式(BridgePattern)是一种用于将抽象部分与它的实现部分分离的设计模式,使它们可以独立地变化。桥接模式通过组合而不是继承的方式来实现两个或多个独立变化的维度,从而减少类之间的耦合性。在桥接模式中,存在两种角色:抽象部分(Abstraction)和实现部分(Implemento......
  • 开发现代化的.NetCore控制台程序:(2)创建一个C#项目模板
    前言上一篇文章(开发一个现代化的.NetCore控制台程序,包含依赖注入/配置/日志等要素)介绍了开发现代化的.NetCore控制台程序的细节,但这还不够,我又创建了一个脚手架模板,并命名为FluentConsole.Templates,可以方便的创建「现代化控制台应用」。源码地址:https://github.com/Deali-A......
  • Go 设计模式中中介者模式
    鱼弦:内容合伙人、新星导师、全栈领域创作新星创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen) 中介者模式原理详细解释:中介者模式(MediatorPattern)是一种行为型设计模式,用于降低多个对象之间的直接通信,并使......
  • Go 设计模式中观察者模式
    鱼弦:内容合伙人、新星导师、全栈领域创作新星创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)          观察者模式原理详细解释:观察者模式(ObserverPattern)是一种行为型设计模式,它定义了......
  • ABAP:CS01/CS02/CS03 BOM创建/修改保存前增强
    BADI:BOM_UPDATEMETHODif_ex_bom_update~change_at_save.******ADDBYZJ20231108校验存储地点是否为空SIFsy-tcodeEQ'CS01'ORsy-tcodeEQ'CS02'ORsy-tcodeEQ'CS03'.LOOPATdelta_stpobINTODATA(ls_stpob)WHERE......
  • 行为模式-责任链模式
    1什么是责任链模式责任链模式(ChainofResponsibilityPattern)是一种行为设计模式,用于建立一个对象链,每个对象都有机会处理请求。请求沿着对象链传递,直到有一个对象能够处理它为止。这样,责任链模式将请求的发送者和接收者解耦,动态确定处理请求的对象。在责任链模式中,通常有两种......
  • 一键操作,数据尽在掌控:JVS-智能BI数据集创建与管理全解析
    现今的数字化、智能化时代,数据被誉为企业的新型资产,企业面临的数据量日益庞大,如何对这些数据进行高效、准确的管理和应用,直接决定了企业的运营效率和决策水平。在这样的背景下,仅仅收集数据并不足够,企业还需要掌握先进的数据管理技术,确保数据的准确性、一致性和实时性。而且,数据的应......