首页 > 其他分享 >设计模式学习(二)工厂模式——简单工厂模式

设计模式学习(二)工厂模式——简单工厂模式

时间:2024-05-14 17:53:45浏览次数:24  
标签:CameraDevice 模式 工厂 bool override 设计模式 public

目录

前言

工厂模式是一种常用的设计模式,属于创建型模式之一。它的主要目的是为了解耦组件之间的依赖关系。通过使用工厂模式,系统中的具体类的实例化过程可以被抽象出来,从而使得系统更加模块化,增强了系统的可维护性和可扩展性。

工厂模式可以分为三种类型:简单工厂模式,工厂方法模式和抽象工厂模式。本文先讨论简单工厂模式。

简单工厂模式

简介

简单工厂模式是工厂模式中的一个便捷实现,是通过一个单一的静态方法来创建不同类型的对象,根据传入参数的不同,可以返回不同类的实例。

示例

抽象相机类(接口类):CameraDevice
具体相机类:BaslerCameraDevice,SickCameraDevice,HuarayCameraDevice

简单工厂类:CameraDeviceFactory

UML类图如下:

代码如下:

class CameraDevice
{
public:
    CameraDevice();
    virtual ~CameraDevice() = 0;
    virtual bool Init();
    virtual bool OpenDevice() = 0;
};

class BaslerCameraDevice : public CameraDevice
{
public:
    ~BaslerCameraDevice() override;
    bool Init() override;
    bool OpenDevice() override;
};

class HuarayCameraDevice : public CameraDevice
{
public:
    ~HuarayCameraDevice() override;
    bool Init() override;
    bool OpenDevice() override;
};

class SickCameraDevice : public CameraDevice
{
public:
    ~SickCameraDevice() override;
    bool Init() override;
    bool OpenDevice() override;
};

class CameraDeviceFactory {
public:
    enum CameraType
    {
        BASLER,
        HUARAY,
        SICK
    };

    static std::shared_ptr<CameraDevice> CreateCamera(CameraType type) 
    {
        switch (type) 
        {
        case BASLER:
            return std::make_shared<BaslerCameraDevice>();
        case HUARAY:
            return std::make_shared<HuarayCameraDevice>();
        case SICK:
            return std::make_shared<SickCameraDevice>();
        default:
            return nullptr;
        }
    }
};

int main()
{
	CameraDeviceFactory::CameraType type = CameraDeviceFactory::BASLER;
	std::shared_ptr<CameraDevice> camera = CameraDeviceFactory::CreateCamera(type);
	return 0;	
}

优点

  • 调用简单:将对象的创建逻辑集中到了简单工厂类中,客户端只需要与工厂类进行交互,而无需关注具体对象的创建过程,降低了客户端代码的复杂性。
  • 解耦:客户端代码与具体对象解耦,可以通过工厂类创建不同的对象,而无需修改客户端代码,提高了代码的灵活性和可扩展性。

缺点

  • 违反开闭原则:对于每个新增的具体产品,都需要修改工厂类的创建逻辑,违反了开闭原则。
  • 扩展困难:若产品创建的过程复杂,当产品种类增多可能导致工厂类的代码过于臃肿,不宜与扩展和维护。

使用场景

  • 产品类型相对固定:当系统中的对象种类不多且不经常变化时,使用简单工厂模式非常合适。因为在这种情况下,向工厂类添加新的产品类型并不频繁,也就不会经常违反开闭原则。
  • 隐藏对象创建细节:当客户端只是需要产品的接口而不关心具体实现时,简单工厂可以隐藏对象的创建细节,客户端只需通过工厂接口请求其需要的对象即可,而无需关心对象是如何被创建、组装的。
  • 对象创建过程简单:当需要创建的对象逻辑比较简单,不涉及复杂的条件判断或算法时,可以使用简单工厂模式

标签:CameraDevice,模式,工厂,bool,override,设计模式,public
From: https://www.cnblogs.com/paw5zx/p/18191839

相关文章

  • Qt 中用Q_GLOBAL_STATIC来实现线程安全的单例模式
    官方说明:Qt中有个宏Q_GLOBAL_STATIC可以用来创建一个全局静态变量,下面看下官方文档的说明:Q_GLOBAL_STATIC(Type,VariableName)CreatesaglobalandstaticobjectoftypeQGlobalStatic,ofnameVariableNameandthatbehavesasapointertoType.Theobjectcr......
  • 未能从程序集“Microsoft.Build.Tasks.vCurrent.dll”加载任务工厂“CodeTaskFactory
     遇到如下错误:未能从程序集“Microsoft.Build.Tasks.vCurrent.dll”加载任务工厂“CodeTaskFactory”。Couldnotloadfileorassembly'file:///G:\VS2022\IDE\MSBuild\Current\Bin\amd64\Microsoft.Build.Tasks.vCurrent.dll'oroneofitsdependencies.系统找不到指定......
  • PostgreSQL 中切换模式(schema)
    要在PostgreSQL中切换模式(schema),您可以使用SETsearch_path命令。模式是PostgreSQL数据库中用于组织和分隔对象的命名空间。以下是如何在psql命令行客户端中切换模式的步骤:打开psql客户端并连接到您的数据库。使用以下命令查看当前搜索路径(searchpath):sql复制代......
  • 危化工厂安全监管新篇章:智能化视频监控方案的探索与实践
    一、背景需求分析危化品因其特殊的物理和化学性质,一旦发生事故,往往会造成严重的人员伤亡和财产损失。传统的监管手段往往依赖于人工巡查和定期检测,然而这种方式不仅效率低下,而且难以全面覆盖和实时监控。因此,借助现代信息技术,特别是视频智能监控技术,构建一套高效、智能的危化工厂......
  • 支持不同业务模式与安全要求的跨网传输解决方案,了解一下!
    对于科技研发型企业来说,最值钱的是研发代码这类数据资产。因此很多企业会想将这些数据“困”在内部,防止数据泄露。最常见的做法是通过防火墙、DMZ区、双网卡主机、虚拟机、网闸/光闸等隔离方式,将网络划分为企业内外网,较为常见的是办公网和互联网;对于业务线较多、需要更精细管理的......
  • 面向可复用性和可维护性的设计模式
    面向可复用性和可维护性的设计模式HITSoftwareConsturction哈工软件构造课程内容回顾——DesignPatternsforReuseandMaintainbality面向可复用性和可维护性的设计模式Outline(课件)CreationalpatternsFactorymethodpatterncreatesobjectswithoutspecifying......
  • 设计模式之代理模式
    为什么要代理?解决在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对......
  • 5分钟学设计模式:简单工厂与美食街的不期而遇
    大家好,我是知微。写代码好几年,是不是还纠结于这些问题:面对一堆if-else,代码越写越长,维护起来比攀登珠穆朗玛峰还难每次只敢小心翼翼改个小功能,生怕程序突然“嘭”一声,全炸了想学习大佬们的代码,却总是看得一头雾水,不知如何下手。别急,优秀的代码设计往往有秘诀——设计模式。......
  • 设计模式之单例模式
    单例模式提供了一种创建对象的最佳方式:这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。单例类只能有一个实例;单例类必须自己创建自己的唯一实例;单例类必须给......
  • 设计模式04----原型模式
    原型模式(PrototypePattern)是一种创建型设计模式,在软件工程中用来创建对象的副本,从而避免新建对象时的性能开销。此模式利用已存在的对象实例作为原型,通过克隆(Clone)机制来创建新的对象,新对象与原型对象具有相同的属性和状态,但彼此独立,修改一个对象不会影响到另一个。原理与特点......