news 2026/4/23 11:54:59

Boost与设计模式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Boost与设计模式

创建型模式

面向对象的软件开发的基础是对象。随着系统的不断演化,会出现越来越多的对象,如果单纯使用C++提供的new操作符,将使程序中到处都是硬编码的对象创建代码,很难适应变,化。而创建型模式抽象了类的实例化过程,它封装了对象的创建动作,使对象的创建可以独立.于系统的其他部分。

抽象工厂(Abstract Factory)

抽象工厂模式把对象的创建封装在一个类中,这个类唯一的任务就是按需生产各种对象,通过派生子类的方式抽象工厂可以生产不同系列的、整套的对象。工厂类通常是单件,以保证,在系统的任何地方都可以访问,其中的每个方法都是工厂方法。在较小的软件系统中,抽象工,厂有时候会退化成一个没有子类的简单工厂。

xpressive库有一个抽象工厂regex_compiler,可以生产各种正则表达式解析对象,但它用模板技术而不是继承实例化出了具体的工厂。

生成器(Builder)

生成器模式分解了复杂对象的创建过程,创建过程可以被子类改变,使同样的过程可以生产出不同的对象。生成器与抽象工厂不同,它不是一次性地创建出产品,而是分步骤逐渐地“装配”出对象,因而可以对创建过程进行更精细的控制。

Boost库没有生成器模式的具体应用,因为生成器模式主要用来构造复杂的对象,对于库来说复杂的创建过程会令库难以使用。

multi_array对象的创建过程类似生成器模式,它先用模板参数设定基本维数,然后再逐个指定各个维度,最后生成一个多维数组。

工厂方法(Factory Method)

工厂方法模式是另一种生产对象的方式,它把对象的创建封装在一个方法中,子类可以改变工厂方法的生产行为生产不同的对象。工厂方法所属的类不一定是工厂类(抽象工厂或者生成器),它可能是一个普通类、一个框架类,或者是一个自由函数。

Boost 库中的 make_shared () 、make_optional() 、make_tuple ()、regex<>:: complie ()等函数都属于工厂方法模式。而functional/factory组件则实现了对new操作符的完全封装,类似于泛化的make_pair ()、 make_optional()。

原型(Prototype)

原型模式使用类的实例通过拷贝的方式创建对象,具体的拷贝行为可以定制,它最常见的用法是为类实现一个clone()成员函数,这个函数创建,个与原型相同或相似的新对象。

weak_ptr的enable_shared _rom_this用法类似于一个原型模式,它创建了一个指向自身的shared_ptr, exception库提供了一个enable_current_exception()函数,它被用于线程安全地处理异常,返回一个clone的异常对象。

指针容器库pointer_container容纳的指针不允许共享,如果要拷贝指针容器,则需要被容纳的元素提供clone()操作,使用原型模式创建一个等价的副本。

单件(Singleton)

单件模式保证类有且仅有一个实例,并且提供一个全局的访问点。通常的全局变量技术虽,然也可以提供类似的功能,但它不能防止用户创建多个实例。单件的基本原理很简单,但有很,多实现的变化。

Boost库目前没有专门的单件库,但在serialization库提供了一个可用的实现。

结构型模式

结构型模式专注于如何组合类或对象,进而形成更大更有用的新对象。

组合对象有两种方式:第一种是C++语言本身提供的继承机制,但它在编译期就已经确定,了对象的关系,无法在运行时改变,缺乏足够的灵活性。第二种方法是运行时对象组合,不同的对象之间彼此互相独立,仅通过定义良好的接口通信协同工作,它更灵活和易于模块化,但因为组合方式富有变化而较难以理解。

适配器(Adapter)

适配器模式把一个类的接口转换(适配)为另一个接口,从而在不改变原有代码的基础上,复用原代码。它的别名wrapper更清晰地说明了它的实现结构:包装了原有对象,再给出一个新的接口。

array类是适配器模式的一个很好例子,它把原始数组适配成了符合STL标准的容器,
使数组可以与其他

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 5:22:56

【国产】华为欧拉操作系统openEuler-22.03重置root密码详细步骤

一、系统环境 操作系统&#xff1a;openEuler-22.03-LTS-SP3 CPU架构&#xff1a;x86_64 二、操作步骤 1、重启系统&#xff0c;按下 e键 进入内核参数编辑界面2、输入用户名和密码 如果系统出现输入用户以及密码界面&#xff0c;可能是GRUB界面设置了密码&#xff0c;输入对应…

作者头像 李华
网站建设 2026/4/17 23:16:51

57、Linux 网络地址配置与管理全解析

Linux 网络地址配置与管理全解析 1. 域名与主机名 域名结构 :域名系统是一个分层的体系,顶级域名下可以有子域名,子域名还能进一步细分。例如, www.sybex.com 就是一个具体的域名,指向 Sybex 的 Web 服务器。 主机名配置 :在配置 Linux 计算机时,可能需要知道其主…

作者头像 李华
网站建设 2026/4/23 11:17:29

HTML表格元素的现代用法:table、thead、tbody、caption等深度解析

HTML表格元素的现代用法&#xff1a;table、thead、tbody、caption等深度解析 在HTML5规范中&#xff0c;表格元素通过语义化标签的组合实现了数据展示与结构化的完美平衡。从基础表格构建到复杂数据可视化&#xff0c;现代Web开发对表格元素的应用已突破传统布局限制&#xff…

作者头像 李华
网站建设 2026/4/23 11:20:12

读懂GEO:AI搜索时代,让品牌被亿级用户看见的“新钥匙”

当你打开手机问AI“家用净水器怎么选”“本地靠谱的装修公司有哪些”时&#xff0c;得到的答案里是否有你熟悉的品牌&#xff1f;如果没有&#xff0c;不是这些品牌不够好&#xff0c;而是它们可能还没掌握AI时代的“流量密码”——GEO&#xff08;AI搜索优化&#xff09;。如今…

作者头像 李华
网站建设 2026/4/23 9:52:39

RocketMQ 消息可靠性保障:事务消息、延迟消息、顺序消息的实现与应用

在分布式系统架构中&#xff0c;消息中间件扮演着“桥梁”与“缓冲”的关键角色&#xff0c;而消息的可靠性直接决定了分布式系统数据一致性与业务稳定性。RocketMQ 作为阿里开源的高性能消息中间件&#xff0c;凭借其完善的可靠性保障机制&#xff0c;在金融、电商、物流等核心…

作者头像 李华
网站建设 2026/4/23 9:52:17

Blender免费材质资源全攻略:从入门到精通的材质库应用指南

Blender免费材质资源全攻略&#xff1a;从入门到精通的材质库应用指南 【免费下载链接】awesome-blender &#x1fa90; A curated list of awesome Blender addons, tools, tutorials; and 3D resources for everyone. 项目地址: https://gitcode.com/GitHub_Trending/aw/aw…

作者头像 李华