首页 > 其他分享 >工厂模式、抽象工厂模式

工厂模式、抽象工厂模式

时间:2023-08-03 11:55:36浏览次数:17  
标签:return 披萨 模式 工厂 抽象 new

工厂模式、抽象工厂模式

工厂模式:

  • what:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,对象创建过程延迟到子类进行。

  • 用相同的行为去根据不同的条件创建不同的实例。适合复杂并且未来有可能扩展的对象。比如一个饭店有好几种披萨,但是披萨的种类还在不断的研发中,就需要扩充披萨这个基类的派生类个数。

    日志服务:根据不同的条件需要将日志记录到不同的存储媒介(如本地文件,本地数据库,远程服务器等)中

    事件上报:根据不同的渠道(如Trap/SMTP/Syslog/Redfish等)上报事件

    数据库连接:根据不同的类型访问不同的数据库(如MemoryDB/LocalDB等)

  • 工厂类代码:

    Shape* shape_factory::get_shape(string name){
    	if(name == 'circle'){
    		return new Circle();
    	}
    	else if(name == 'rect'){
    		return new Rect();
    	}
    	else if(name == 'square'){
    		return new Square();
    	}
    }
    

    可以看到当需要加入新的形状种类时,还需要更改这个工厂代码。这也是违反了CPP设计的某规则。

抽象工厂模式

  • 抽象工厂可以认为是工厂的工厂模式

  • 可以有不同的产品族,如披萨族,糕点族,饮品族;

  • 抽象工厂中,有获取不同族的方法,即获取到某一工厂。而后在工厂内部就是上述的工厂模式:

    如抽象工厂:

    class AbstractFactory{
    public:
    	ShapeFactory* getShapeFactory(){
    		return new shape_factory(); // 即上一节定义的shape工厂
    	}
    	ColorFactory* getColorFactory(){
    		return new color_factory();
            
    	}
    }
    
  • 缺点:扩展性较差,增加产品族需修改抽象工厂代码。

标签:return,披萨,模式,工厂,抽象,new
From: https://www.cnblogs.com/fireinstone/p/17602921.html

相关文章

  • PHP设计模式汇总
    PHP设计模式汇总没想到啊,没想到。自己竟然坚持了下来,完成了设计模式深入的学习,并且输出了23篇用php演示的设计模式的文章。但这不是最主要的,更深层次的收获是顺便背下了这些模式的定义及类图。在深入学习了设计模式之后,对Laravel等框架的架构理解也更清楚明了了。就像我在很多模式......
  • JavaScript中介者模式:解耦组件之间的依赖关系
    JavaScript中介者模式在前端开发中,组件之间的依赖关系往往会导致代码的复杂性和可维护性降低。为了解决这个问题,我们可以使用中介者模式来解耦组件之间的依赖关系。本文将介绍JavaScript中介者模式的概念和使用方法,并通过一个实例来说明其应用。什么是中介者模式?中介者模式是一......
  • RunnerGo五种压测模式你会配置吗
    我们在做性能测试时需要根据性能需求配置不同的压测模式如:阶梯模式。使用jmeter时我们需要安装插件来配置测试模式,为了方便用户使用,RunnerGo内嵌了压测模式这一选项,今天给大家介绍一下RunnerGo的几种压测模式和怎么根据性能需求选择合适的压测模式。RunnerGo提供了以下五种压测模......
  • IdentityServer4 密码模式
    1.Config添加用户的配置publicclassConfig{///<summary>///提示invalid_scope添加///</summary>publicstaticIEnumerable<ApiScope>ApiScopes=>newApiScope[]{newApiScope("api")};publicstaticIEnu......
  • SingletonPattern-单例模式
    在C#中,单例模式(SingletonPattern)用于确保一个类只有一个实例,并提供一个全局访问点来获取该实例。单例模式常用于需要限制某个类只能创建一个对象的场景,例如数据库连接、日志记录器等。懒汉式(LazyInitialization)这种实现方式使用了双重检查锁定(双IF加锁),即在获取实例前先检查......
  • 构建以人为本的全面预算管理模式
    在财务分析的转型过程中,系统、预测、过程和大数据等都发挥着重要的作用,除此之外,我们往往会忽视一个更重要的因素——人在成功的转型项目中更是发挥着核心作用。企业大部分转型之旅都与人有关,通常人可以发挥创造力以更好地为企业服务。如今,数据质量正以难以置信的速度得到改善,企业运......
  • 降低工厂辅料采购成本的4种方法
    工厂辅料是工业生产过程中不可或缺的物资,其种类繁多,包括但不限于劳保用品、五金工具、刀具器材、紧固件、个人防护PPE、焊接耗材等。降低工厂辅料采购成本,可以有效提升企业的竞争力和盈利能力。采购成本是相对复杂的,包括不那么明显的管理费用方面。这些采购成本中的大多数都可以得......
  • Java单例模式
    单例模式线程安全的四种创建方式静态代码块,静态内部类,双重检锁,枚举模式代码展示静态代码块privatestaticfinalSingletonDemoSINGLETON_DEMO;static{SINGLETON_DEMO=newSingletonDemo();}privateSingletonDemo(){}publicstaticSingletonDemoget......
  • 基于B/S模式的电子病历系统,覆盖电子病历模板制作到管理使用的整个流程
    基于B/S模式的电子病历系统,覆盖电子病历模板制作到管理使用的整个流程电子病历EMR(ElectronicMedicalRecord)也称为计算机化的病历或基于计算机的病人记录CMR(ComputerBasedMdicalRecord),它是用电子设备保存、管理和传输数字化的病人医疗记录,是取代手写纸张的病历。对电子病历一致......
  • Java设计模式--装饰器模式
    Java设计模式--装饰器模式一、问题背景在项目场景中,有这样一个需求,需要对录入的加班进行规则校验,包括但不限于,对加班的录入时间进行检查,对录入的加班类型进行检查,对加班日期的班次进行对比检查,对潜入系统的时长进行对比检查等等。具体来说,就是对一条加班记录,进行多种规则的检查......