C++设计模式

源于Design Pattern Explanation with C++ Implementation的 设计模式 C++ 1、单例模式(Singleton Pattern ) 2、抽象工厂模式(Abstract Factory Pattern ) 3、工厂方法模式(Factory Method Pattern ) 4、简单工厂模式(Simple Factory Pattern ) 5、建造者模式(Builder Pattern ) 6、原型模式(Prototype Pattern ) 7、结构模式(Str 阅读详情
 

最近开始看设计模式之禅,之前看过一遍可惜没有学以致用,这次边看边整理

六大设计原则

单一职责原则(Single Responsibility Principle)

There should never be more than one reason for a class to change. 应该有且仅有一个原因引起类的变更 。

里氏替换原则(Liskov Substitution Principle, LSP)

第一种定义, 也是最正宗的定义: If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T,the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T.(如果对每一个类型为S的对象o1, 都有类型为T的对象o2, 使得以T定义的所有程序P在所有的对象o1都代换成o2时, 程序P的行为没有发生变化, 那么类型S是类型T的子类型。 )

第二种定义: Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.(所有引用基类的地方必须能透明地使用其子类的对象。 )

依赖倒置原则(Dependence Inversion Principle, DIP)

High level modules should not depend upon low level modules.Both should depend upon abstractions.Abstractions should not depend upon details.Details should depend upon abstractions.
高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。

依赖关系有三种方式来传递: 构造函数传递依赖对象 、 Setter方法传递依赖对象 、 接口声明依赖对象。

接口隔离原则

实例接口(Object Interface)类的对象符合类的定义
类接口(Class Interface)类的定义符合接口定义 ,c++中是符合virtual关键词定义的虚函数,java中符合interface关键词定义的接口

  • Clients should not be forced to depend upon interfaces that they don’t use.(客户端不应该依赖它不需要的接口。 )
  • The dependency of one class to another one should depend on the smallest possible interface.(类间的依赖关系应该建立在最小的接口上。 )

迪米特法则(Law of Demeter, LoD)

也称为最少知识原则(Least Knowledge Principle, LKP) , 一个对象应该对其他对象有最少的了解。

  • Only talk to your immediate friends(只与直接的朋友通信。 )
  • 朋友间也是有距离的, 尽量不要对外公布太多的public方法和非静态的public变量, 尽量内敛, 多使用private、 package-private、 protected等访问权限
  • 是自己的就是自己的, 如果一个方法放在本类中, 既不增加类间关系, 也对本类不产生负面影响, 那就放置在本类中
  • 谨慎使用Serializable

开闭原则

Software entities like classes,modules and functions should be open for extension but closed for modifications.(一个软件实体如类、 模块和函数应该对扩展开放, 对修改关闭。 )

设计模式分类

共有 23 种设计模式可分为三大类

类型简述
创建型模式(Creational Patterns)处理对象的创建机制,试图在一个适合的方式创建对象,隐藏了创造过程的逻辑不需要使用new。wiki
结构型模式(Structural Patterns)通过描述实体间关系、类和对象的组合来简化设计。wiki
行为型模式(Behavioral Patterns)确定对象之间的公共通信模式并实现这些模式的设计模式。通过这样做,这些模式增加了执行此通信的灵活性。wiki

创建型模式

  • 单例模式(Singleton Pattern)
    Ensure a class has only one instance, and provide a global point of access to it.(确保某一个类只有一个实例, 而且自行实例化并向整个系统提供这个实例。)
  • 工厂方法模式 (Factory Method Pattern)
    Define an interface for creating an object,but let subclasses decide which class to instantiate.Factory Method lets a class defer instantiation to subclasses.(定义一个用于创建对象的接口, 让子类决定实例化哪一个类。 工厂方法使一个类的实例化延迟到其子类。 )
  • 抽象工厂模式 (Abstract Factory Pattern)
    Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口, 而且无须指定它们的具体类。 )
  • 建造者模式/ 生成器模式(Builder Pattern)
    Separate the construction of a complex object from its representation so that the same construction process can create different representations.(将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示。 )
  • 原型模式(Prototype Pattern)
    Specify the kinds of objects to create using a prototypical instance,and create new objects by copying this prototype.(用原型实例指定创建对象的种类, 并且通过拷贝这些原型创建新的对象。 )

机构型模式

  • 代理模式(Proxy Pattern)
    Provide a surrogate or placeholder for another object to control access to it.(为其他对象提供一种代理以控制对这个对象的访问。 )
  • 装饰模式(Decorator Pattern)
    Attach additional responsibilities to an object dynamically keeping the same interface.Decorators provide a flexible
    alternative to subclassing for extending functionality.(动态地给一个对象添加一些额外的职责。就增加功能来说, 装饰模式相比生成子类更为灵活。 )
  • 适配器模式/变压器模式(Adapter Pattern)/ 包装模式(Wrapper)
    包装模式也包括装饰模式
    Convert the interface of a class into another interface clients expect.Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.(将一个类的接口变换成客户端所期待的另一种接口, 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 )
  • 组合模式/合成模式(Composite Pattern)/ 部分–整体模式(Part-Whole)
    Compose objects into tree structures to represent part-whole hierarchies.Composite lets clients treat individual objects and compositions of objects uniformly.(将对象组合成树形结构以表示“部分–整体”的层次结构, 使得用户对单个对象和组合对象的使用具有一致性。 )
  • 外观模式/ 门面模式(Facade Pattern)
    Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsystem easier to use.(要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。 门面模式提供一个高层次的接口, 使得子系统更易于使用。 )
  • 享元模式(Flyweight Pattern)
    池技术的重要实现方式。 Use sharing to support large numbers of fine-grained objects efficiently.(使用共享对象可有效地支持大量的细粒度的对象。 )
  • 桥梁模式/桥接模式(Bridge Pattern)
    Decouple an abstraction from its implementation so that the two can vary independently.(将抽象和实现解耦, 使得两者可以独立地变化。 )

行为型模式

  • 模版方法模式(Template Method Pattern)
    Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.(定义一个操作中的算法的框架, 而将一些步骤延迟到子类中。 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 )
  • 命令模式(Command Pattern)
    Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable
    operations.(将一个请求封装成一个对象, 从而让你使用不同的请求把客户端参数化, 对请求排队或者记录请求日志, 可以提供命令的撤销和恢复功能。 )
  • 中介者模式(Mediator Pattern)
    Define an object that encapsulates how a set of objects interact.Mediator promotes loose coupling by keeping objects from referring to each other
    explicitly,and it lets you vary their interaction independently.(用一个中介对象封装一系列的对象交互, 中介者使各对象不需要显示地相互作用, 从而使其耦合松散, 而且可以独立地改变它们之间的交互。 )
  • 职责链模式 / 责任链模式(Chain of Responsibility Pattern)
    Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.Chain the receiving objects and pass the request along the chain until an object handles it.(使多个对象都有机会处理请求, 从而避免了请求的发送者和接受者之间的耦合关系。 将这些对象连成一条链, 并沿着这条链传递该请求, 直到有对象处理它为止。 )
  • 策略模式/政策模式(Strategy Pattern)
    Define a family of algorithms,encapsulate each one,and make them interchangeable.(定义一组算法, 将每个算法都封装起来, 并且使它们之间可以互换。 )
  • 迭代器模式(Iterator Pattern)
    Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.(它提供一种方法访问一个容器对象中各个元素, 而又不需暴露该对象的内部细节。 )
  • 观察者模式(Observer Pattern)/发布订阅模式(Publish/subscribe)
    Define a one-to-many dependency between objects so that when one object changes state,all its dependents are notified and updated automatically.(定义对象间一种一对多的依赖关系, 使得每当一个对象改变状态, 则所有依赖于它的对象都会得到通知并被自动更新。 )
  • 备忘录模式(Memento Pattern)
    Without violating encapsulation,capture and externalize an object’s internal state so that the object can be restored to this state later.(在不破坏封装性的前提下, 捕获一个对象的内部状态, 并在该对象之外保存这个状态。 这样以后就可将该对象恢复到原先保存的状态。 )
  • 访问者模式(Visitor Pattern)
    Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates. (封装一些作用于某种数据结构中的各元素的操作, 它可以在不改变数据结构的前提下定义作用于这些元素的新的
    操作。 )
  • 状态模式(State Pattern)
    Allow an object to alter its behavior when its internal state changes.The object will appear to change its class.(当一个对象内在状态改变时允许其改变行为, 这个对象看起来像改变了其类。 )
  • 解释器模式(Interpreter Pattern)
    Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.(给定一门语言, 定义它的文法的一种表示, 并定义一个解释器, 该解释器使用该表示来解释语言中的句子。 )

范例源码

源码GitHub:CppDesignPattern

Techie亮博客,转载请注明:Coologic » C++设计模式

Coologic 博客域名已更改,已从 www.techieliang.com 改为 www.coologic.cn,上述链接地址受到影响,若需查看源文请手动修改,多有不便,敬请谅解。
C++ 设计模式 在C++中,设计模式(Design Patterns)是用于解决在软件设计中经常遇到的一些通用问题的最佳实践。这些设计模式是在多年的软件开发过程中积累下来的经验和智慧的结晶。定义一个操作中的算法的框架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。将一个类的接口转换成客户端所期望的另一种接口,从而使得原本由于接口不兼容而无法一起工作的类能够一起工作。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 阅读详情

相关推荐

《C++ 设计模式》

设计模式代表了最佳的实践,在面向对象的编程中被很多老鸟们反复使用。使用设计模式有很多好处:可重用代码、保证代码可靠性、使代码更易被他人理解 ......

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

C++设计模式(全23种)

设计模式概述 设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。等这种思想融入到了思想中后,你就会不自觉地使用这种思想去进行你的设计和开发。 文章目录设计模式概述一、创建型模式Factory 模式(工厂模式)AbstactFactory 模式(抽象工厂模式)Singleton 模式( 单例模式)Builder 模式(建造者模式)Prototype 模式(原型模式)二、结构型模式Bridge 模式(桥接模式)总结

weixin_45712636的博客 9万+

Optisystem软件与Matlab软件的联合数据读取

目录 Matlab软件程序编写 Optisystem软件的连接与设置 数据读取结果 Matlab软件程序编写 利用Matlab软件按照下图编写程序,保存为getdata.m文件。 OutputPort1 =InputPort1; fileID=fopen('OSAdata.txt','wt'); fprintf(fileID,'%f\n',OutputPort1.Sampled.Signal); fclose(fileID); Optisystem软件的连接与设置 (以基于线性插值法

Vivian_Chen_的博客 4855

C++ 常用设计模式(学习笔记)

设计模式 1、工厂模式 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式作为一种创建模式,一般在创建复杂对象时,考虑使用;在创建简单对象时,建议直接new完成一个实例对象的创建。 1.1、简单工厂模式 主要特点是需要在工厂类中做判断,从而创造相应的产品,当增加新产品时,需要修改工厂类。使用简单工厂模式,我们只需要知道具体的产品型号就可...

duchengjun的博客 1910

STM32基于软件模拟IIC进行AHT21B温湿度采集

通过学习软件IIC来进行实操AHT21B采集温湿度。

Liu-FE的博客 3700

网易CodeWave智能生成应用实战:5分钟搞定库存管理系统(附详细配置截图)

本文详细介绍了如何利用网易CodeWave智能生成应用在5分钟内快速构建定制化库存管理系统。通过自然语言描述需求,无需编程即可生成包含产品管理、库存预警等核心功能的应用,并支持字段微调、业务流程注入等深度优化。文章附有详细配置截图,帮助用户高效实现数字化转型。

julia4scientist的博客 888

C++设计模式总结

一、单例模式 一个类不管常见多少次对象,永远只能得到该类型一个对象的实例 // p1、p2、p3指向同一对象 A* p1 = new A(); A* p2 = new A(); A* p3 = new A(); 饿汉式单例模式: 还没有获取实例对象,实例对象就已经产生了 优点:线程安全。对象存放在数据段,main函数还没有开始执行,对象就已经初始化好了,一定是线程安全的。 缺点: 获取在软件启动的时候,并没有使用到这个对象,然而这个对象已经产生,这就比较浪费资源。 #include<iostream

长期更新自学笔记 5246

Kali Linux实战:Aircrack-ng破解Wi-Fi密码的完整流程与常见问题解决

本文详细介绍了在Kali Linux中使用Aircrack-ng套件进行Wi-Fi密码破解的完整流程,包括环境准备、无线网卡配置、网络扫描、握手包捕获与字典破解等关键步骤。同时针对无线网卡不支持监听模式、无法捕获握手包等常见问题提供了实用解决方案,帮助安全研究人员有效评估无线网络安全性。

weixin_29323049的博客 297

c++—设计模式

c++—设计模式

m0_72814368的博客 3014

03 Token、Embedding、上下文窗口:开发者必须懂的三个基本概念

Token、Embedding 和上下文窗口是大模型应用开发的三个基础概念。本文从成本、速度、检索和上下文设计四个角度讲清它们的工程意义,帮助开发者理解为什么同一段内容会超限、变贵,为什么 RAG 能做语义检索。

老于的笔记的专栏 410

YOLOv11改进 | 引入SFSConv空间频率选择卷积(含SFSC3k2二次创新),空间频率特征协同作用,检测性能全面提升

本文提出在YOLOv11中引入SFSConv空间频率选择卷积模块,通过显式分离和动态融合空间域与频率域特征,解决传统卷积对多尺度目标检测的局限性。SFSConv包含空间频率分离、动态权重融合和协同特征重建三个核心机制,并进一步创新提出SFSC3k2结构,通过双路频率分支增强特征协同作用。该改进显著提升了YOLOv11在遥感、医学等多尺度复杂场景下的检测性能,实验显示在微小目标检测任务中mAP提升5%-10%。代码实现展示了SFSConv模块的核心逻辑及其在PyTorch中的高效实现。

走向CTO的路上... 768

23种设计模式的cpp举例

23种设计模式的cpp举例

SnailElderBro的博客 1723

2024阅读AOSP源码的正确打开姿势

在Android系统开发中,阅读AOSP(Android Open Source Project)源码是非常重要的环节。然而,如何构建一个优雅的阅读环境却是一个不容忽视的问题。本文将介绍不同工具和方法下阅读AOSP源码的正确姿势,并对比其优缺点。

虎哥LoveDroid 2710

cpp_redis源码架构解析:深入理解现代C++ Redis客户端设计模式

cpp_redis是一个基于C++11的异步多平台轻量级Redis客户端库,它支持同步操作、流水线、哨兵和高可用性。这个现代化的C++ Redis客户端库设计精巧,采用了多种现代C++设计模式,为开发者提供了高效、线程安全的Redis访问能力。本文将深入解析cpp_redis的源码架构,帮助您理解其核心设计思想和实现原理。 ## 架构概览:分层设计与模块化 cpp_redis采用了清晰的分层架

gitblog_01072的博客 1007

Claude Code 100个真实案例 - 用AI搭建GIS地理信息系统(地图标注+热力图)

本案例展示如何使用 Claude Code 从零搭建一个完整的 GIS 地理信息系统。我们将使用 Python + Flask 作为后端,Leaflet.js 作为前端地图引擎,实现地图标注、热力图展示、区域绘制、坐标搜索等功能。全程通过与 Claude Code 对话完成,让你感受 AI 在地理信息领域的强大开发能力。

yueyeguzhuo的专栏 113

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【CPP】一文带你掌握CPP设计模式

设计模式是软件开发中用于解决常见问题的经典解决方案。它们是由经验丰富的开发者总结出来的最佳实践,能够提高代码的可维护性、可扩展性和可复用性。设计模式是软件开发中的经典解决方案,能够提高代码的可维护性、可扩展性和可复用性。通过掌握常见的设计模式,开发者可以更好地组织代码结构,解决复杂问题。理解模式的核心思想:每个设计模式都有其独特的应用场景和解决问题的方式。灵活运用:在实际开发中,根据具体需求选择合适的设计模式。避免过度设计:设计模式是工具,而不是目标,避免为了使用模式而增加不必要的复杂性。

Ape's IT Blog 948

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

设计模式【cpp实现版本】

单例模式是一种设计模式,确保一个类只有一个实例,并提供全局访问点。常见的实现方式包括饿汉式和懒汉式。饿汉式在程序启动时即创建实例,线程安全但可能浪费资源;懒汉式在首次使用时创建实例,需考虑线程安全问题,可通过加锁或静态局部变量实现。工厂模式则用于封装对象的创建过程,分为简单工厂、工厂方法和抽象工厂。简单工厂通过一个工厂类创建多种产品,但扩展性差;工厂方法为每种产品提供一个工厂类,扩展性好;抽象工厂则用于创建一系列相关产品,适合产品簇的场景。这些设计模式有助于提高代码的可维护性和扩展性。

qq_55317476的博客 1154

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MediaMTX 移动端 HLS 卡顿慢?调 3 个 LL-HLS 参数把首帧压到 1 秒内

你用手机在地铁、弱 WiFi 里打开直播间,画面卡在缓冲圈转了十几秒才出来——这是用 MediaMTX 分发直播时最常见的 HLS 加载慢问题。MediaMTX 是一个开箱即用的实时媒体服务器,能把 RTSP / RTMP / SRT / WebRTC 等直播流转成 **LL-HLS(低延迟 HLS)**,供手机浏览器和 App 直接播放。慢,往往不是带宽不够,而是几个配置项没调到位。下面按「排查

gitblog_01117的博客 408

c++ 设计模式(一)

我也是不经意间看到的,之前也学习过设计模式,只不过总是觉得“纸上得来终觉浅”,总要动手实践一下才会有所体会和感悟。 如果英语还可以的话就看这个:JakubVojvoda/design-patterns-cpp 如果英语比较菜就看这个:liu-jianhao/Cpp-Design-Patterns 参考:分享几个适合初学者的C语言/C++开源项目!涉及从基础语法到算法 另外还看到一个比较好的c项目(不是设计模式):AllAlgorithms/c ...

juluwangriyue的博客 193

cpp设计模式学习总结

。。。

Go_hack的博客 744

设计模式C++实现详解

《设计模式C++实现》是一个GitHub上的开源项目,由Jakub Vojvoda维护,它提供了C++中23种经典设计模式的实现和示例。这个项目的目标是帮助开发者更好地理解和运用这些设计模式,以便在软件开发中提高代码质量、可维护性和可扩展性。这些设计模式源自“Gang of Four”的著作《设计模式:可复用面向对象软件的基础》。 ## 2. 项目快速启动 ### 安装依赖 确保你的系统安装...

gitblog_00338的博客 539

Cpp设计模式及举例

C++设计模式之单例模式 C++设计模式之工厂模式 C++设计模式之代理模式 C++设计模式之外观模式 C++设计模式之适配器模式 C++设计模式之模板方法模式 C++设计模式之策略模式 C++设计模式之命令模式 C++设计模式之观察者模式 C++设计模式之装饰模式 ...

weixin_44754751的博客 512

c++ 24种设计模式

C++ 常用设计模式(学习笔记) 设计模式 1、工厂模式 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式作为一种创建模式,一般在创建复杂对象时,考虑使用;在创建简单对象时,建议直接new完成一个实例对象的创建。 1.1、简单工厂模式 主要特点是需要在工厂类中做判断,从而创造相应的产品,当增加新产品时,需要修改工厂类。...

qq_37871669的博客 2435

【C++ 设计模式】C++ 设计模式全景剖析:从语言特性到工程落地

在软件开发的领域里,“设计模式”被视为一套久经考验的解决方案,它从架构层面抽象并总结了常见的问题和应对策略。对于 C++ 这门既能接近硬件、又能进行高层抽象的语言来说,设计模式更像是一座桥梁,一端连接着底层的内存与性能控制,一端通往更灵活、更易维护的代码结构。正如心理学家马斯洛曾提到“当手里只有一把锤子时,看到的就全是钉子”,在 C++ 里若只靠 “new / delete” 处理对象,势必会在复杂项目中陷入困境,而设计模式则为我们提供更多手段与思维。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 3365

C++设计模式系列

C++设计模式——简单工厂模式 C++设计模式——工厂方法模式 C++设计模式——抽象工厂模式 C++设计模式——单例模式 C++设计模式——建造者模式 C++设计模式——原型模式 C++设计模式——适配器模式 C++设计模式——桥接模式 C++设计模式——组合模式 C++设计模式——装饰模式 C++设计模式——外观模式 C++设计模式——享元模式 C++设计模式——代理模...

CoderAldrich的专栏 2万+
上一篇: 《代码整洁之道》笔记
下一篇: Qt容器类汇总说明
coologic
博客等级 码龄7年 35粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值