news 2026/2/1 21:27:32

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/1/30 5:15:48

AI提示词实战技巧:从新手到专家的五个关键突破

你是否曾经遇到过这样的场景&#xff1a;同事用AI三分钟搞定一份专业报告&#xff0c;而你却反复修改提示词仍不得要领&#xff1f;同样的模型&#xff0c;不同的结果——这背后的秘密&#xff0c;就是提示工程的实战技巧。 【免费下载链接】Prompt-Engineering-Guide dair-ai/…

作者头像 李华
网站建设 2026/1/29 14:50:19

agsXMPP使用

agsXMPP使用 agsXMPP中的例子已经有注册、登录、添加好友、接收好友添加请求、发送消息、接收消息等功能。 修改用户密码 登录后可用以下方法修改密码 IQ iq new IQ(IqType.set); Register riq new Register(); riq.Username "Username"; riq.Password "…

作者头像 李华
网站建设 2026/2/1 6:04:24

HTML图像与多媒体:img、picture、figure、video标签深度解析

HTML图像与多媒体&#xff1a;img、picture、figure、video标签深度解析 在网页开发中&#xff0c;图像与多媒体元素是提升用户体验的核心要素。从基础的图片嵌入到复杂的响应式适配&#xff0c;从语义化结构到视频播放控制&#xff0c;HTML5提供了丰富的标签与属性支持。本文…

作者头像 李华
网站建设 2026/1/23 2:52:49

区块链 Web3 外包开发公司

寻找一家优秀的区块链 Web3 外包开发公司&#xff0c;需要您从技术能力、项目经验、行业声誉和合作模式四个维度进行深度考察。以下是评估和找到优秀 Web3 外包开发公司的关键方法和考察点&#xff1a;一、 评估技术深度与广度优秀的 Web3 开发公司绝不仅仅是“能写代码”&…

作者头像 李华
网站建设 2026/1/30 14:50:28

Claude Code Router智能路由系统:5步实现多AI模型自动调度

Claude Code Router智能路由系统&#xff1a;5步实现多AI模型自动调度 【免费下载链接】claude-code-router Use Claude Code without an Anthropics account and route it to another LLM provider 项目地址: https://gitcode.com/GitHub_Trending/cl/claude-code-router …

作者头像 李华
网站建设 2026/1/29 8:28:37

3天掌握专业RAW照片处理:darktable零基础快速上手指南

你是否曾为RAW照片处理感到困惑&#xff1f;专业软件操作复杂、订阅费用高昂&#xff0c;让摄影爱好者望而却步&#xff1f;今天&#xff0c;我将带你用完全免费的darktable软件&#xff0c;通过3个渐进阶段实现从新手到专业级的跨越。 【免费下载链接】darktable darktable is…

作者头像 李华