抽象工厂模式(c++描述)

突破编程_C++_设计模式(抽象工厂模式) c++ 设计模式:抽象工厂模式 阅读详情

  在抽象工厂模式中,我引用从网上看来的一篇例子来说明。

 

   随着时间的推移,走过的地方越来越多,你天南海北的朋友也越来越多。你发现菜原来还分了许多菜系,鲁菜、粤菜、湘菜等等, 你招待

 

不同的朋友要用不同的菜系,这下难办了,你的厨师都是鲁菜风味,怎么办,广东的朋友来了吃不惯。现在我们再回到简单工厂模式,我们把

 

红烧肉再向下继承,生成鲁菜红烧肉、粤菜红烧肉、湘菜红烧肉;清蒸鱼向下继承为鲁菜清蒸鱼、粤菜清蒸鱼、湘菜清蒸鱼,其它也以此类

 

推。我们也修改一下这个类,不让其返回食物基类,而是返回红烧肉、清蒸鱼这一层次,并把这些方法抽象化,作为菜系工厂基类,然后再从

 

此基类继承出,鲁菜工厂、粤菜工厂、湘菜工厂等等,再由这些具体工厂实现创建具体菜的工作,哈哈你如果招待广东朋友就用粤菜工厂,返

 

回的就是一桌粤菜菜系的红烧肉、清蒸鱼了,你的广东朋友一定会吃的非常合乎胃口了。噢,非常好,你已经实现了抽象工厂模式了。结构模

 

型图也变成了的样子了。

 

 抽象工厂模式

 


 现在可以看到,想新来做一个菜系,只需新聘请一个厨师就可以了,多么完美,但是如果你想新增加一个菜就变得非常困难了。

 

实现代码:

 

//产品基类

#include <iostream>

class FoodProduct
{
public:
 FoodProduct(void);
 ~FoodProduct(void);
 virtual void Delicious();
};
//红烧鱼类

class BraisingFish :public FoodProduct
{
public:
 BraisingFish(void);
 ~BraisingFish(void);
 virtual void Delicious();
};

//清蒸鱼类

class SteamedFish :public FoodProduct
{
public:
 SteamedFish(void);
 ~SteamedFish(void);
 virtual void Delicious();
};
//川式清蒸鱼

class ChuanBraisingFish :public BraisingFish
{
public:
 ChuanBraisingFish(void);
 ~ChuanBraisingFish(void);
 virtual void Delicious();
};
//鲁式清蒸鱼
class LuBraisingFish :public BraisingFish
{
public:
 LuBraisingFish(void);
 ~LuBraisingFish(void);
 virtual void Delicious();
};

//川(鲁)式红烧鱼类的写法与清蒸鱼类相同

 

//下面实现烹饪工厂

//烹饪总工厂

class CookFactory
{
public:
 CookFactory(void);
 ~CookFactory(void);
 virtual BraisingFish *CookBraisingFish();
 virtual SteamedFish *CookSteamedFish();
};

//鲁菜工厂

class LuCookFactory :public CookFactory
{
public:
 LuCookFactory(void);
 ~LuCookFactory(void);
 virtual BraisingFish *CookBraisingFish();
 virtual SteamedFish *CookSteamedFish();
};
//鲁菜工厂的实现

BraisingFish *LuCookFactory::CookBraisingFish()
{
 std::cout<<"The Lu BraisingFish is Cooked!"<<std::endl;
 return new LuBraisingFish();
}

SteamedFish *LuCookFactory::CookSteamedFish()
{
 std::cout<<"The Lu StramedFish is Cooked!"<<std::endl;

 return new LuSteamedFish();
}

//川菜工厂

class ChuanCookFactory :public CookFactory
{
public:
 ChuanCookFactory(void);
 ~ChuanCookFactory(void);
 virtual BraisingFish *CookBraisingFish();
 virtual SteamedFish *CookSteamedFish();
};

//川菜工厂的实现

BraisingFish *ChuanCookFactory::CookBraisingFish()
{
 std::cout<<"The Chuan BraisingFish is Cooked!"<<std::endl;
 return new ChuanBraisingFish();
}

SteamedFish *ChuanCookFactory::CookSteamedFish()
{
 std::cout<<"The Chuan SteamedFish is Cooked!"<<std::endl;
 return new ChuanSteamedFish();
}

 

//下面是客户端的实现


int main(void)
{
 CookFactory *cookFac = new LuCookFactory();

 BraisingFish *braFish = cookFac->CookBraisingFish();
 braFish->Delicious(); 
 std::cout<<"******************************************/n";
 delete braFish;

 SteamedFish *steFish = cookFac->CookSteamedFish();
 steFish->Delicious();
 std::cout<<"******************************************/n";
 delete steFish;
 delete cookFac;

 cookFac = new ChuanCookFactory();

 braFish = cookFac->CookBraisingFish();
 braFish->Delicious();
 std::cout<<"******************************************/n";
 delete braFish;

 steFish = cookFac->CookSteamedFish();
 steFish->Delicious();
 delete steFish;

 system("pause");

 return 0;
}

 

至此,抽象工厂模式完成。

 

       现在可以和工厂模式对比一下,抽象工厂返回的接口不再是产品A和产品B的共同基类Product了,而是产品A、产品B基类(在工厂模式

 

中它们为具体实现类,这里变成了基类)了。此时工厂的抽象和简单工厂中的工厂方法也很类似,就是这些特征区使其别于工厂模式而变成抽

 

象工厂模式了,因此抽象工厂解决的是创建一系列有共同风格的产品(鲁菜还是粤菜),而工厂方法模式解决的创建有共同特征的一系列产品

 

(红烧肉、清蒸鱼它们都是食物)。当然简单工厂的缺陷在抽象工厂中又再次出现了,我要新增加一个产品,工厂抽象接口就要改变了。因此

 

抽象工厂并不比工厂模式完美,只不过是各自的适用领域不同而已。其实,这里如果把抽象工厂模式的接口返回产品A和产品B的共同基类

 

(工厂模式返回的参数),你会发现,奇怪这个模式怎么这么眼熟,它不是恰恰退化成工厂模式了。


       类模式与对象模式的区别讨论:先看定义类“模式使用继承关系,把对象的创建延迟的子类,对象模式把对象的创建延迟到另一个对象

 

中”。 分析:首先它们创建对象都不是在基类中完成,都是在子类中实现,因此都符合类模式的概念;但是工厂模式的创建产品对象是在编

 

译期决定的,要调用某个工厂固定的,而抽象工厂模式对产品的创建是在运行时动态决定的,只有到运行时才确定要调用那个工厂,调用工厂

 

随运行环境而改变。

适用性:

  • 一个系统要独立于它的产品的创建、组合和表示时
  • 一个系统要由多个 产品系列中的一个来配置时
  • 当你要强调一个系列相关的产品对象的设计以便进行联合使用时
  • 当你提供一个产品类库,而只想显示它们的接口而不是实现时。
C++抽象工厂模式:从设计理念到实战应用 / 抽象产品:按钮接口public:// 抽象产品:文本框接口public:// 抽象工厂接口:创建GUI组件public:一句话回顾:抽象工厂模式是管理"产品族创建"的最佳实践,让复杂对象创建更优雅、系统更灵活。 阅读详情

相关推荐

C++设计模式|创建型 3.抽象工厂模式

在上一篇文章中介绍了,每个具体工厂负责生产一个专门的产品,其代码扩展性很好,这篇文章将介绍抽象工厂模式。

Brillian123的博客 1118

c++ 设计模式 --- 抽象工厂模式

抽象工厂模式是所有形态的工厂模式中最为抽象和最一般性的。抽象工厂模式可以向 客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。抽象工厂方法是针对与一个产品族,使得易于交换产品系列,只需改变具体的工厂就可以使用不同的产品配置。当一个族中的产品对象被设计成一起工作且一个应用只是用同一族的对象,例如设计系统生成不同风格的UI界面,按钮,边框等UI元素在一起使用,并且只能同属于一种风格,这很容易使用抽象工厂实现。1.提供一个抽象工厂类:声明一组创建一族产品的工厂方法2.提

weixin_60569662的博客 1447

设计模式:抽象工厂模式C++实现

文章目录前言1. 抽象工厂模式理解2. C++实现抽象工厂模式总结 前言 今天复习了抽象工厂模式,之前复习了简单工厂模式和工厂方法模式,它们实现的功能都是一样的:为了封装对象的创建过程。如果大家对简单工厂模式和工厂方法模式不熟悉,可以看下之前的文章: 简单工厂模式:https://blog.youkuaiyun.com/DU_YULIN/article/details/119778822 工厂方法模式:https://blog.youkuaiyun.com/DU_YULIN/article/details/119821207

DU_YULIN的博客 506

C++设计模式——抽象工厂模式

抽象工厂模式的核心目标是提供一个接口,允许客户端通过此接口创建一系列相关或相互依赖的对象,而不必知道具体产生的对象的具体类

qqrrjj2011的博客 1948

【C++实战㊵】C++抽象工厂模式:解锁高效对象创建的密钥

本文聚焦 C++ 抽象工厂模式实战,先阐释其定义 —— 提供创建相关或依赖对象的接口,无需指定具体类,介绍产品族创建、跨平台开发等适用场景,解析抽象工厂、具体工厂等组成结构。接着给出产品族 A、B 的实现代码,对比其与工厂方法模式,说明产品族扩展方法。还分享退化场景、与依赖注入结合、线程安全处理等实战技巧,最后通过跨平台 UI 组件库项目,展示模式在多平台组件创建与测试中的应用,助力开发者掌握该模式高效创建对象的能力。

邓邓子的博客 1202

C++ 抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。

青春不老,奋斗不止! 1万+

C++设计模式---抽象工厂模式

抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。

qq_29320587的博客 503

Demo2Reward:用人类演示动态优化VLM奖励模型提示

多模态大模型(VLM)的奖励建模正面临核心瓶颈——静态提示导致语义鸿沟与泛化失效。其本质是将人类判断标准固化为不可更新的文本模板,使奖励信号脱离真实任务意图。Demo2Reward提出范式级改进:以结构化人类演示为元信号,驱动提示权重连续优化,实现从‘结果打分’到‘过程理解’的跃迁。该方法不修改VLM主干,却显著提升RLHF收敛效率与OOD鲁棒性,在医疗、工业质检等场景验证了跨任务迁移与热修复能力。它重新定义了提示工程的技术价值:不是前端微调,而是奖励系统的认知校准基础设施。

weixin_34302798的博客 408

C++设计模式-抽象工厂模式

目录 基本概念 代码与实例 基本概念 抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,从而无需指定他们具体的类。 抽象工厂的好处: 1. 易于交换产品系列,在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置; ...

IT1995的博客 5894

8位可控加减法电路设计

一、设计要求   利用Logisim平台中现有运算部件构建一个8位可控加减法器,可支持八位加减法,利用已经封装全加器和逻辑门进行连接,要求实现相应的输出,判断是否溢出。 二、方案设计 实验原理: [A]补+[B]补 = [A+B]补(mod2^n+1)   公式1        [A-B]补 = [A]补+[-B]补(mod2^n+1)    公式2 FA为全加器,利用全加器实现加减法,难点在于实验减法,对输入的[Y]补各位取反加一即为[-Y]补,利用公式2,就可以将减法转化为加法再利用全加

qq_51700383的博客 1万+

手把手教你学SOME/IP「1.0•概述」

本文介绍了SOME/IP协议的基本概念和主要特点。SOME/IP全称为"Scalable service-Oriented MiddlewarE over IP",是一种面向服务的车载嵌入式通信协议,支持远程过程调用、事件通知等功能。文章指出SOME/IP是AUTOSAR标准的一部分,在车载以太网架构中处于应用层位置,负责服务调度和通信封装。协议具有可扩展性强、资源消耗低、兼容性好等优势,能满足汽车电子领域对实时性、可靠性的严格要求。同时,文章也说明了SOME/IP的正确书写规范,并解释

nihaoljq2010的博客 679

C++设计模式:抽象工厂模式(风格切换案例)

抽象工厂模式(Abstract Factory)是一种**创建型设计模式**,其核心思想是:**为一组相关或相互依赖的对象提供一个创建接口,而无需指定它们具体的类**。简单来说,就是一个工厂可以生产一系列相关的对象。

专注于 Qt/C++ 应用开发和机器视觉领域的开源项目分享。期待与您共同进步! 1956

【已解决】WorkBuddy 国内版与国际版共存 + 关闭自动更新 教程

本文介绍在Windows系统中同时安装并共存WorkBuddy国内版与国际版的完整方案,通过修改product.json文件关闭启动自动更新,修复缓存配置污染问题,确保两版本互不干扰、数据独立。重点解决因共享身份标识导致的更新源错乱、进程锁冲突及自动覆盖风险,提供命令行备份与修改步骤,并强调手动升级时需避免使用应用内更新功能,以规避平台参数错位缺陷。

人生是一场修行 1517

抽象工厂模式

文章目录可以解决那类问题主要应用场景用C语言实现抽象工厂模式实现步骤案例描述案例实现使用C++实现抽象工厂模式 可以解决那类问题 针对大部分对象生产场景,使用工厂方法模式即可以搞定。但是: 1、如果解决某个问题需要用到的工厂种类非常多,那么程序逻辑里就需要维护很多的工厂,增加程序熵值,后期维护难度会很高。 2、很多时候多个对象之间是存在依赖关系的,这样的两个对象如果用两个工厂去维护,会增加很多不必...

qq_23929673的博客 338

华为OD面试八股真题 - 操作系统 - 1

华为OD技术面,操作系统相关八股真题提供详细解答,这篇博客主要涉及于进程和线程相关知识点

qq_45776114的博客 1641

RFSoC全面解析(八)—— ZCU111 RFSoC评估工具的上位机界面

下面的内容的参考文献为:XILINX公司文档UG1287。 XILINX公司提供了一个RFSoC的ADC/DAC性能的评估工具或者叫评估系统,这个文档就是讲如何使用这个评估工具的。 整个评估系统总的框图如上图所示,评估系统由上位机、ZCU111开发板、子卡以及网线、射频线缆组成。 ZCU111开发板内主要使用的RFSoC外设为时钟驱动和DDR4,RFSoC的PS部分和PL部分都使用了。 PS部分发挥的功能为通过网口与上位机通信,通过IIC总线控制时钟驱动芯片以及数据流控制等;PL部分发挥的功能为

4381

c++实现简单工厂、工厂方法、抽象工厂模式

c++实现简单工厂、工厂方法、抽象工厂模式: 题目描述: (1)、简单工厂模式 使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,请实现该场景。现需要增加一个新的Robot类,如果传入参数R,则返回一个Robot对象,对代码进行修改并注意女娲的变化。 #include<iostream> using...

qq_40728028的博客 359

【Bluetooth蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程

1、开篇词 2、蓝牙开发入门 3、蓝牙协议栈总览 4、蓝牙协议栈——物理层 5、蓝牙协议栈——链路层 6、蓝牙协议栈——传输层 7、蓝牙协议栈——L2CAP协议 8、蓝牙协议栈——ATT协议 9、蓝牙协议栈——GATT协议 10、蓝牙通信流程分析 11、蓝牙协议栈——Bluez交叉编译 12、蓝牙调试工具汇总

Donge's Blog 1万+

JAVA实现KFC的收银系统

一、题目名称:肯德基快餐店的收银系统 二、题目内容: 同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能: 1.正常餐品结算和找零。 2.基本套餐结算和找零。 3.使用优惠劵购买餐品结算和找零。 4.可在一定时间段参与店内活动(自行设计或参考官网信息)。 5.模拟打印小票的功能(写到文件中)。 基本要求: 1.程序设计风格良好,控制台界面友好,最多两人一组完成任务。 2.实现功能

qq_43287707的博客 630

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C++:浅谈工厂模式与抽象工厂模式

C++:浅谈工厂模式与抽象工厂模式标签: C++ 工厂模式 抽象工厂模式by 小威威之前写过一篇谈模式的文章:单例模式接下来我将浅显的谈谈工厂模式与抽象工厂模式。工厂模式与抽象工厂模式虽有差异,但实现的目的可以看成一致的:They offers the interface for creating a family of related objects, without explicitly spe

linwh8的博客 5739

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++设计模式:抽象工厂模式

抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类。

CodeBowl的博客 3238

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

抽象工厂模式的C++、Java实现

1、抽象工厂模式UML 图1. 抽象工厂模式的UML 2、C++实现   C++实现类图为: 图2. 抽象工厂模式的C++实现类图   其中,AbstractFactory的实现代码为: 1 //抽象工厂类基类。 2 class AbstractFactory 3 { 4 public: 5 AbstractFactory(); 6 ...

weixin_30548917的博客 139

C++ 设计模式之抽象工厂模式

抽象⼯⼚模式可以确保⼀系列相关的产品被⼀起创建,这些产品能够相互配合使⽤,再举个例⼦,有⼀些家具,⽐如沙发、茶⼏、椅⼦,都具有古典⻛格的和现代⻛格的,抽象⼯⼚模式可以将⽣产现代⻛格的家具放在⼀个⼯⼚类中,将⽣产古典⻛格的家具放在另⼀个⼯⼚类中,这样每个⼯⼚类就可以⽣产⼀系列的家具。但是如果有多类产品呢,⽐如说“⼿机”,⼀个品牌的⼿机有⾼端机、中低端机之分,这些具体的产品都需要建⽴⼀个单独的⼯⼚类,但是它们都是相互关联的,都共同属于同⼀个品牌,这就可以使⽤到【抽象⼯⼚模式】。【声明】本编码题目来源于【

K1_uestc的博客 1309

C++ 设计模式——抽象工厂模式

抽象工厂模式提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。它通常用于需要创建多个产品族的场景。

慢慢记录,慢慢更新。 2154
上一篇: 工厂模式(c++描述)
下一篇: 我对CTO的理解 CTO要有技术魅力
blpluto
博客等级 码龄21年 117粉丝 44原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值