带你深入浅出设计模式:五、简单工厂模式:构建软件的高效生产“流水线”

news/2024/10/4 20:01:47 标签: 设计模式, 简单工厂模式, 学习方法

此为设计模式谈!

总-分-总的结构生活化的例子给你讲解设计模式

码农不易,各位学者学到东西请点赞收藏支持支持!

开始部分:

简单工厂模式就是通过一个工厂类创建对象,减少了客户端的代码的复杂性和耦合性。(耦合性:就是类似于关系紧密度)

分:

1.老规则,在vs中创建一个控制台应用程序

2.实现编码,这里用一个汽车制作工厂来作为辅助例子

2.1 实现抽象汽车基类

2.2 实现汽车产品类,继承抽象汽车基类

2.3 实现工厂类,用来生产汽车产品

2.4 当客户需要什么产品,跟工厂说,就生成具体产品,而不用客户了解汽车是如何构造的(降低耦合性)

#include <iostream>
using namespace std;

// 抽象汽车
class AbstractCar
{
public:
    virtual void ShowCarName() = 0;//纯虚函数
};


// 具体产品的汽车继承
// 凯美瑞
class Camry :public AbstractCar
{
    virtual void ShowCarName()
    {
        cout << "Camry Car." << endl;
    }
};


// 迈腾
class Magotan :public AbstractCar
{
    virtual void ShowCarName()
    {
        cout << "Magotan Car." << endl;
    }
};


// 奥迪
class Audi :public AbstractCar
{
    virtual void ShowCarName()
    {
        cout << "Audi Car." << endl;
    }
};


// 奔驰
class Benz :public AbstractCar
{
    virtual void ShowCarName()
    {
        cout << "Benz Car." << endl;
    }
};

// 通过传递参数来确定需要生成那汽车
// 汽车工厂
class CarFactory
{
public:
    static AbstractCar* CreateCarFunc(string cname)
    {
        if (cname == "Camry")
            // 具体生产细节......
            return new Camry;
        else if (cname == "Magotan")
            // 具体生产细节......
            return new Magotan;
        else if (cname == "Audi")
            // 具体生产细节......
            return new Audi;
        else if (cname == "Benz")
            // 具体生产细节......
            return new Benz;
        else
            return nullptr;           

    }   
};




int main()
{
    // 创建工厂
    CarFactory* fty = new CarFactory;

    // 创建汽车
    AbstractCar* car;

    // 指定工厂需要创建的汽车
    car = fty->CreateCarFunc("Benz");
    car->ShowCarName();
    delete car;

    car = fty->CreateCarFunc("Camry");
    car->ShowCarName();
    delete car;

    car = fty->CreateCarFunc("Audi");
    car->ShowCarName();
    delete car;

    car = fty->CreateCarFunc("Magotan");
    car->ShowCarName();
    delete car;

    return 0;
}

3.以下为简单工厂模式的结构图和三大模块,来辅助理解,主要为工厂、抽象产品基类、实际产品

总:在开发中,简单工厂模式主要解决接口选择问题。


http://www.niftyadmin.cn/n/5690289.html

相关文章

Android SystemUI组件(10)禁用/重启锁屏流程分析

该系列文章总纲链接&#xff1a;专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节持续迭代之前章节的思维导图&#xff0c;主要关注左侧上方锁屏分析部分 应用入口处理流程解读 即可。 在 Android 系统中&#xff0c;禁用锁屏…

Ubuntu启动后第一次需要很久才能启动GTK应用问题

Ubuntu启动后第一次需要很久才能启动GTK应用问题 自从升级了 Ubuntu 之后&#xff0c;设备重启&#xff0c;发现打开 Terminal 、Nautilus 以及其他的GTK 应用都很慢&#xff0c;需要至少一分钟的时间启动。 刚开始也是拿着 journalctl 的异常日志去寻找答案&#xff0c;但是没…

ValueError: You cannot perform fine-tuning on purely quantized models.

在使用peft 微调8bit 或者4bit 模型的时候&#xff0c;可能会报错&#xff1a; You cannot perform fine-tuning on purely quantized models. Please attach trainable adapters on top of the quantized model to correctly perform fine-tuning. Please see: https://huggi…

Python并发编程(1)——Python并发编程的几种实现方式

更多精彩内容&#xff0c;请关注同名公众&#xff1a;一点sir&#xff08;alittle-sir&#xff09; Python 并发编程是指在 Python 中编写能够同时执行多个任务的程序。并发编程在任何一门语言当中都是比较难的&#xff0c;因为会涉及各种各样的问题&#xff0c;在Python当中也…

前端模块化CommonJs、ESM、AMD总结

前端开发模式进化史 前端工程化正是为了应对这些演化中出现的挑战和需求而发展起来的&#xff1a; 前后端混合&#xff1a;服务端渲染&#xff0c;javascript仅实现交互前后端分离&#xff1a;借助 ajax 实现前后端分离、单页应用(SPA)等新模式模块化开发&#xff1a;npm 管理…

CMU 10423 Generative AI:lec18(大模型的分布式训练)

这个文档主要讲解了分布式训练&#xff08;Distributed Training&#xff09;&#xff0c;特别是如何在多GPU上训练大规模的语言模型。以下是主要内容的概述&#xff1a; 1. 问题背景 训练大规模语言模型的主要挑战是内存消耗。 训练过程中&#xff0c;内存消耗主要来源于两个…

【Kubernetes】常见面试题汇总(四十八)

目录 108.考虑一家拥有非常分散的系统的跨国公司&#xff0c;希望解决整体代码库问题。您认为公司如何解决他们的问题&#xff1f; 109.我们所有人都知道从单服务到微服务的转变从开发方面解决了问题&#xff0c;但在部署方面却增加了问题。公司如何解决部署方面的问题&#x…

MaLDAPtive:用于 LDAP SearchFilter 解析、混淆等的开源框架!

MaLDAPtive 是一个用于 LDAP SearchFilter 解析、混淆、反混淆和检测的框架。 其基础是 100% 定制的 C# LDAP 解析器&#xff0c;该解析器处理标记化和语法树解析以及众多自定义属性&#xff0c;可实现准确、高效的 LDAP SearchFilter 混淆、反混淆和检测。 该项目的其余部分…