学习笔记:关注C++设计模式之AbstractFactory模式

软考软件设计师案例分析精解:从UML到设计模式的实战避坑指南 在软件工程领域,面向对象分析与设计是构建复杂系统的核心思想,其通过UML(统一建模语言)等工具将业务需求转化为可视化的软件蓝图。理解类图、时序图等UML模型背后的设计原理,是确保系统具备良好扩展性和维护性的关键。这一技术价值在于,它能帮助开发者从宏观到微观把握系统结构,有效管理复杂度。在实际应用场景中,无论是企业级应用开发还是系统架构设计,熟练运用设计模式(如策略模式、工厂模式)来解决常见设计问题,已成为高级工程师的必备技能。本文以一次典型的软考真题复盘为切入点,深入剖析了数据流图、ER图与UML类图在复杂 阅读详情

 

 

#ifndef ABSTRACTFACTORY_H
#define ABSTRACTFACTORY_H

class AbstractProductA;
class AbstractProductB;

class AbstractFactory
{
public:
    virtual ~AbstractFactory();
    virtual AbstractProductA* CreateProductA() = 0;
    virtual AbstractProductB* CreateProductB() = 0;

protected:
    AbstractFactory();
private:

};

class ConcreteFactory1:public AbstractFactory
{
public:
    ConcreteFactory1();
    ~ConcreteFactory1();
    AbstractProductA* CreateProductA();
    AbstractProductB* CreateProductB();
protected:
private:
};

class ConcreteFactory2:public AbstractFactory
{
public:
    ConcreteFactory2();
    ~ConcreteFactory2();
    AbstractProductA* CreateProductA();
    AbstractProductB* CreateProductB();
protected:
private:
};

#endif // ABSTRACTFACTORY_H

 

#include "AbstractFactory.h"
#include "Product.h"

using namespace std;

AbstractFactory::AbstractFactory()
{

}
AbstractFactory::~AbstractFactory()
{

}
ConcreteFactory1::ConcreteFactory1()
{

}
ConcreteFactory1::~ConcreteFactory1()
{

}
AbstractProductA* ConcreteFactory1::CreateProductA()
{
    return new ProductA1();
}
AbstractProductB* ConcreteFactory1::CreateProductB()
{
    return new ProductB1();
}
ConcreteFactory2::ConcreteFactory2()
{

}
ConcreteFactory2::~ConcreteFactory2()
{

}
AbstractProductA* ConcreteFactory2::CreateProductA()
{
    return new ProductA2();
}
AbstractProductB* ConcreteFactory2::CreateProductB()
{
    return new ProductB2();
}
#ifndef PRODUCT_H
#define PRODUCT_H

class AbstractProductA
{
public:
    virtual ~AbstractProductA();
protected:
    AbstractProductA();
private:
};

class AbstractProductB
{
public:
    virtual ~AbstractProductB();
protected:
    AbstractProductB();
private:
};

class ProductA1:public AbstractProductA
{
public:
    ProductA1();
    ~ProductA1();
protected:
private:
};

class ProductA2:public AbstractProductA
{
public:
    ProductA2();
    ~ProductA2();
protected:
private:
};

class ProductB1:public AbstractProductB
{
public:
    ProductB1();
    ~ProductB1();
protected:
private:
};

class ProductB2:public AbstractProductB
{
public:
    ProductB2();
    ~ProductB2();
protected:
private:
};
#endif // PRODUCT_H

 

#include "Product.h"
#include <iostream>

using namespace std;

AbstractProductA::AbstractProductA()
{

}
AbstractProductA::~AbstractProductA()
{

}
AbstractProductB::AbstractProductB()
{

}
AbstractProductB::~AbstractProductB()
{

}
ProductA1::ProductA1()
{
    cout << "ProductA1..." << endl;
}
ProductA1::~ProductA1()
{

}
ProductA2::ProductA2()
{
    cout << "ProductA2..." << endl;
}
ProductA2::~ProductA2()
{

}
ProductB1::ProductB1()
{
    cout << "ProductB1..." << endl;
}
ProductB1::~ProductB1()
{

}
ProductB2::ProductB2()
{
    cout << "ProductB2..." << endl;
}
ProductB2::~ProductB2()
{

}


 

#include "AbstractFactory.h"


int main(int argc, char *argv[])
{
    AbstractFactory* cf1 = new ConcreteFactory1;
    cf1->CreateProductA();
    cf1->CreateProductB();

    AbstractFactory* cf2 = new ConcreteFactory2;
    cf2->CreateProductA();
    cf2->CreateProductB();
}

 

AbstractFactory模式是为创建一组(有多类)相关或依赖的对象提供创建接口,而Factory模式正如我在相应的文档中分析的是为一类对象提供创建接口或延迟对象的创建到子类中实现。并且可以看到,AbstractFactory模式通常都是使用Factory模式实现(ConcreteFactory1)。

 

它的模型如下:

 

 

如果你还看不懂这个模型的用意,那你可以想象一下,一些打怪的游戏,每关都有不同级别的怪物,所以你要为每个关卡生成不同级别的怪物,而如果仍采用Factory模型,因为只有一个工厂生成怪物,因此难以维护。这个模式可以为不同关卡生成不同类型的怪物,当维护的时候,只需要改变各个关卡的怪物类即可。

 

C++创建者模式详解--设计模式(6) Prototype模式来源:           关于这个模式,突然想到了小时候看的《西游记》,齐天大圣孙悟空再发飙的时候可以通过自己头上的3根毛立马复制出来成千上万的孙悟空,对付小妖怪很管用(数量最重要)。Prototype模式也正是提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建。在C++中拷贝构造函数(CopyConstructor)曾经是很多程序员的噩梦,浅层拷贝和深层拷贝... 阅读详情

相关推荐

如何在Ubuntu 22.04上为AlphaFold3配置NVIDIA A100 GPU(含驱动安装避坑指南)

本文提供了在Ubuntu 22.04系统上为AlphaFold3部署NVIDIA A100 GPU的完整安装教程。内容涵盖从系统环境准备、NVIDIA驱动安装与避坑指南,到Docker容器化部署、数据库获取以及最终构建运行AlphaFold3的详细步骤,旨在帮助研究者和开发者高效配置高性能计算环境,充分发挥A100的硬件潜力。

nft7creator的博客 468

26种设计模式讲解 干货总结,非常干!(每一个都附C++完整代码示例实现)

26种设计模式讲解 干货总结,非常干!(每一个都附C++完整代码示例实现)

Warren++的博客 4474

伪距单点定位推导+DOP值分析(附matlab仿真代码)

伪距单点定位公式推导、DOP值分析与matlab仿真分析

shannanshouyin的博客 2512

C++ 23种设计模式

c++23种设计模式

c++、UE 735

巨量千川M-API实战:5分钟搞定短视频计划数据自动获取(Python版)

本文详细介绍了如何利用巨量千川M-API和Python快速搭建自动化工具,实现短视频计划数据的自动获取。通过实战代码演示了从环境准备、Token管理到核心数据接口调用的完整流程,帮助电商运营和技术开发者告别手动导出,高效完成数据汇总与分析。

weixin_29325515的博客 1357

NCCL使用指南-进阶篇

前文介绍了NCCL的常用环境变量,本文介绍了NCCL-test性能基准测试,以及一些大规模集群测试的经验数据。

father_yingying的博客 1406

设计模式之原型模式 c++实现以及详解

定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

hnust_xiehonghao的专栏 883

别再手动配IP了!用NI-USRP Configuration Utility快速搞定USRP 2954与LabVIEW连接

本文详细介绍了如何使用NI-USRP Configuration Utility快速配置USRP 2954与LabVIEW的连接,解决传统手动IP配置的繁琐问题。通过图形化工具自动完成设备发现、IP设置和连接验证,大幅提升软件无线电实验效率,特别适合信号收发应用场景。

weixin_27102543的博客 292

从实例中学习设计模式

前言 设计模式一度被捧为程序员的圣经。但有不少人对设计模式只知其形不知其实,认为设计模式是一种很神秘很强大的咒语,似乎只要对着一堆乱糟糟的代码说一声“设计模式,急急如律令!”那代码就会突然变得很好很强大,一切毛病都消失无踪。 其实设计模式并不是这样的。设计模式是一些编程惯用法的总结和提炼,这些惯用法在各种优秀代码中被普遍的使用,无论你学过还是没学过设计模式,很多思想和做法你都在有意无意的

青青的专栏--C/C++ OOA/D Design Pattern 2251

AI原生应用在UGC内容审核中的实战经验

AI原生应用(AI-Native Application)——以机器学习模型为核心驱动力,深度整合数据、算法、工程架构的完整系统——为破解这一三角难题提供了全新范式。全链路数据驱动:从数据采集、模型训练到决策优化,形成闭环自治系统,无需人工规则干预多模态深度理解:同时处理文本、图像、音频、视频等多类型内容,理解语义而非简单匹配特征自适应进化能力:通过人机协同反馈持续学习新型违规模式,模型周级迭代成为常态审核效率提升300%:单条视频审核耗时从2.3秒降至0.7秒。

AI算力网络与通信的博客 1149

2026年复旦微电数字IC笔试试卷带答案解析

摘要: 本文为复旦微电子MCU/SOC岗位笔试模拟题,涵盖单片机架构、数字电路、存储技术等核心知识点。内容包括: 单选题(30分):考察Cortex-M中断机制、时序分析(建立/保持时间)、逻辑化简、跨时钟域设计(格雷码应用)、存储器特性(NAND Flash操作单元)等; 波形分析(15分):聚焦D触发器行为、时钟分频、建立时间违例判断及跨时钟域同步; 多选题(25分):涉及亚稳态成因与处理、异步FIFO设计要点、MCU低功耗策略、NAND Flash特性及复旦微电市场地位; 简答题(20分):解析建立/

Open 344

设计模式概念

设计模式概念 分类: 非C/C++类 2011-04-14 14:56 10人阅读 评论(0) 收藏 举报 在面向对象的编程中,软件编程人员更加注重以前的代码的重用性和可维护性。 设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。 一般而言,一个模式有四个基本要素 1.

junecau的专栏 754

【云原生技术】云计算与网络:容器服务(Tencent Kubernetes Engine,简称TKE)简介

基本概念主要特点应用场景技术实现容器服务(Tencent Kubernetes Engine,简称TKE)是腾讯云提供的一种托管的容器管理服务,基于开源的Kubernetes系统。TKE旨在简化容器的部署、管理和扩展,并且提供高性能、可靠性和安全性,适用于各种规模的企业和应用。

weixin_46453070的博客 2043

C++设计模式-生成器

定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 结构 理解 1. 生成器(Builder)模式是一步步构建一个复杂的产品,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们,用户不知道内部的具体构建细节。 2.

woods2001的专栏 3871

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Aha!设计模式(31)-原型(5)

7. 效果 Prototype有许多和Abstract Factory(3 . 1)和Builder(3 . 2)一样的效果:它对客户隐藏了具体的产品类,因此减少了客户知道的名字的数目。此外,这些模式使客户无需改变即可使用与特定应用相关的类。   隐藏具象类,针对抽象类编程与其说是创建对象模式是的共性,不如说是大多数设计模式的共性。进一步来讲,应该说是面向对象编程这门技术的共性。重要的事情说...

面向对象思考 565

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java的23种设计模式详解整理之创建型模式

Java的23种设计模式整理之创建型模式:Abstract Factory 模式, Builder模式, Factory Method模式 以及Prototype模式

kiksh710000的博客 368

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

设计模式祛魅:从内存泄漏到生产级落地的实战校准

设计模式是解决软件可维护性与可扩展性问题的经典范式,其核心在于应对变化、管理状态和优化资源。享元模式本质是通过分离内蕴/外蕴状态实现内存分布优化,而非简单对象复用;桥接模式关键在解耦不同演进节奏的抽象与实现层,如存储SDK升级与业务逻辑稳定性的矛盾。真实工程中,模式有效性必须可量化——如享元需满足内存收益公式,桥接需识别变化频率差。本文基于JVM内存告警、GC飙升、日志聚合等典型生产问题,还原设计模式在高并发、多环境、强约束下的技术选型逻辑与落地陷阱,聚焦如何让模式真正服务于稳定性、性能与协作效率。

baochuanying9531的博客 467

C++工厂方法模式实战:从解耦到跨平台应用与性能优化

在软件工程中,设计模式是解决常见问题的可复用方案,其核心价值在于提升代码的可维护性和扩展性。工厂方法模式作为一种创建型模式,其核心原理是将对象的创建逻辑与使用逻辑分离,通过定义创建对象的接口,让子类决定实例化哪个类,从而实现对修改封闭、对扩展开放。这一模式的技术价值在于它能够有效管理对象创建的复杂性,降低模块间的耦合度,尤其在大型、长期演进的项目中,能显著减少因需求变更导致的代码修改范围。其典型应用场景包括跨平台开发、插件系统、数据序列化以及游戏资源管理等,通过抽象工厂和具体工厂的协作,确保同一产品族内对象

weixin_34176694的博客 767

好书整理系列之-设计模式:可复用面向对象软件的基础 3

第3章创建型模式创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。随着系统演化得越来越依赖于对象复合而不是类继承,创建型模式变得更为重要。当这种情况发生时,重心从对一组固定行为的硬编码( h a r d - c o d i n g)转移为定义一个较小的基本行为集,这些行为可以被...

mmdev 148

模式设计 比较

Creation Pattern 当系统演化成依赖于对象的组合、聚集时,创建性模式带来了更大的灵活性。 Abstract Factory:抽象工厂是创建对象族。它能确保被创建对象家族的一致性,和对象家族发生改变的灵活性,在跨平台的设计中可以得到应用。 Prototype:一种将对象生成的责任代理给自己的模式。它与C++中的拷贝函数不同,C++不支持拷贝函数的多态,即当对象使用基

745

系统架构设计师学习之路(35)

设计模式——设计模式概述

将如何存在的博客 217

原版创建型模式

第二,它们隐藏了这些类的实例是如何创建和放在一起的。因此,创建型模式在什么被创建,谁创建它,它是怎样创建的,以及何时创建这些方面给予了很大的灵活性。有时创建型模式是相互竞争的。当这种情况发生时,重心从一组固定行为得硬编码转移到定义一个较小的基本行为集,这些行为可以被组合成任意数目的更复杂的行为。这样创建有特定行为的对象要求的不仅仅是实例化一个类。我们也将举一个通用的例子,为一个电脑游戏创建一个迷宫来说明它们的实现。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象。

追赶时代的博客 290

Modern C++ Design 笔记 第九章 Abstract Factory

再没有读这章的时候就在想,上一章是factory那这章是不是就是Abstract Factory了。果不其然啊!一样的,在开始描述之前,援引wikipedia的定义来看看:A software design pattern, the Abstract Factory Pattern provides a way to encapsulate a group of individual factor

斯巴达的勇士已经是雅典的臣民了。。。 1817

大语言模型在代码简化中的局限性与实用策略

代码重构与优化是软件工程中的核心实践,旨在提升代码的可读性、可维护性和性能。其原理在于通过识别并消除冗余、降低复杂度、改善结构,使代码更符合人类认知习惯。在AI编程辅助兴起的背景下,大语言模型(LLM)基于海量代码数据进行模式匹配和生成,为自动化代码处理提供了新工具。然而,LLM在代码简化任务上存在显著局限:它擅长生成符合常见模式的代码,但缺乏对业务意图和架构设计的深层理解,难以进行真正的算法优化或设计模式重构,且易受训练数据中“复杂性偏见”的影响。因此,其技术价值更多体现在辅助生成代码草稿、提供重构思路,

weixin_34323858的博客 407

C++抽象基类

先看一篇文章,写得挺好的    为什么C++要定义抽象基类? C++为什么要定义抽象基类?       抽象类就是类里定义了纯虚成员函数的类。纯虚函数只提供了接口,并没有具体实现。抽象类不能被实例化,通常是作为基类供子类继承,子类中重写虚函数,实现具体的接口。 为什么要

NEVER 1万+
上一篇: 学习笔记:关注C++设计模式之Factory模式
下一篇: 学习笔记:关注C++设计模式之Singleton模式
jacqueslim
博客等级 码龄16年 12粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值