软件模式
文章平均质量分 80
C++高级进阶必须要学习的
浩瀚之水_csdn
路漫漫其修远兮,吾将上下而求索,立刻行动,坚持,努立
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【设计模式】建造者模式详解
建造者模式是一种分步骤构造复杂对象的设计模式,通过分离构造过程和表示,实现相同构建过程创建不同表示的能力。本文以计算机组装系统为例,展示了C++实现代码:定义Computer产品类,抽象建造者ComputerBuilder及其具体实现(办公/游戏电脑),由Director控制构建流程。该模式优势在于构造与表示分离、扩展性强、避免参数膨胀,适用于需要精细控制构造步骤的场景。与工厂模式不同,建造者模式更关注分步骤构建过程。原创 2025-07-28 15:23:04 · 368 阅读 · 0 评论 -
【设计模式】设计原则之迪米特法则(LoD: Law of Demeter)
摘要:迪米特法则(最少知识原则)是降低代码耦合度的关键设计原则,要求对象仅与直接朋友通信。核心规则包括限制访问范围、禁止链式调用和封装组件状态。本文通过C++代码示例展示了违反与遵循LoD的实现差异,并探讨其在多层对象访问、STL容器封装等场景的应用。文章还介绍了LoD与外观模式、中介者模式的结合,以及C++中的特殊优化策略。最后提出实施检查清单,强调LoD与SOLID原则的协同效应,指出其在大型系统中可显著提高代码可靠性和可维护性。原创 2025-07-25 17:22:02 · 476 阅读 · 0 评论 -
【设计模式】设计原则之依赖倒置原则
摘要:依赖倒置原则(DIP)是SOLID设计原则的关键部分,通过抽象解耦高层业务模块与底层实现细节。C++实现的核心是:1)定义抽象接口;2)高层模块依赖抽象;3)通过依赖注入(构造/模板/工厂)注入具体实现。典型方案包括接口基类+虚函数、模板元编程、抽象工厂模式等,配合DI容器管理依赖。优势在于提高可测试性(支持Mock)、降低耦合度(修改实现不影响业务逻辑)、增强扩展性,但会引入额外设计复杂度。实施时需识别不稳定依赖、建立抽象层、重构依赖关系,最终在组合根组装对象图。原创 2025-07-23 12:00:58 · 815 阅读 · 0 评论 -
【设计模式】设计原则之里氏替换原则
摘要: 里氏替换原则(LSP)是面向对象设计中确保继承关系正确性的核心准则,要求子类必须能无缝替换基类而不破坏程序行为。关键点包括:1)子类需保持父类方法契约(行为一致);2)避免破坏不变量(如正方形继承矩形导致的宽高约束冲突);3)不强化前置条件或弱化后置条件。C++实现中应通过虚函数规范、智能指针和契约设计(如assert验证不变量)保障LSP,优先使用组合而非继承解决潜在冲突。遵循LSP可提升多态可靠性、降低维护成本,其本质是对继承体系的质量约束。原创 2025-07-16 15:43:18 · 582 阅读 · 0 评论 -
【设计模式】设计原则之开闭原则
摘要: 开闭原则(OCP)要求软件实体对扩展开放,对修改关闭。C++可通过两种方式实现: 运行时多态:使用抽象基类定义稳定接口,派生类实现扩展功能(如策略模式)。 编译时多态:通过模板编程动态替换策略(零运行时开销)。 典型应用包括策略模式和访问者模式,核心是抽象变化点(如支付方式),避免通过修改代码添加功能。权衡动态/静态多态的性能差异,高频路径推荐模板,复杂系统推荐虚函数。OCP通过隔离变化提升系统稳定性,降低核心模块修改频率。原创 2025-07-15 17:19:06 · 357 阅读 · 0 评论 -
【设计模式】设计原则之单一职责原则
单一职责原则(SRP: Single Responsibility Principle)是 SOLID 设计原则中的基石,其核心目标是提升代码的可维护性和降低耦合度。原创 2025-07-11 09:37:23 · 445 阅读 · 0 评论 -
【设计模式】设计模式六大原则
在C++中,设计模式的六大核心原则(SOLID + DIP的同级补充)是构建灵活、可维护和可扩展软件架构的基石。原创 2025-07-11 09:28:05 · 831 阅读 · 0 评论 -
【设计模式】单例模式之双检锁(Double-Checked Locking)
双检锁是实现线程安全单例模式的技术,通过两次检查机制兼顾性能和线程安全。C++11前版本存在指令重排风险,可能导致返回未完全初始化的对象。现代C++推荐三种改进方案:使用原子操作配合内存序、基于call_once的初始化,或最简单的静态局部变量方式(最优选)。双检锁适用于高初始化成本、频繁访问的多线程场景,但需权衡实现复杂度与平台兼容性。在新项目中应优先使用C++11的静态局部变量实现,既线程安全又简洁高效。若必须使用双检锁,建议结合原子操作或call_once确保安全性,并妥善处理对象生命周期管理。原创 2025-06-27 10:52:05 · 638 阅读 · 0 评论 -
【设计模式】饿汉式单例模式(Eager Initialization)
饿汉式单例模式在程序启动时即创建实例,确保线程安全。传统实现通过静态成员变量或静态指针,需类外初始化;现代C++17引入inline变量简化了实现。该模式适合初始化成本低、必须提前初始化的场景,但需注意依赖关系导致的析构顺序问题。最佳实践推荐使用C++17的静态局部变量实现,既保持线程安全又优化资源使用,同时建议分离初始化逻辑并处理生命周期终结问题。原创 2025-06-27 10:50:42 · 468 阅读 · 0 评论 -
【设计模式】单例模式之懒汉式
摘要:懒汉式单例模式的4种实现方案对比,重点推荐C++11静态局部变量方案。基础版存在线程安全问题;全局加锁版性能低下;双检锁方案需配合atomic保证安全;现代C++(11+)的静态局部变量实现最为简洁安全,自动处理线程安全和内存管理。性能测试显示静态局部变量和双检锁的后续访问性能最优。建议新项目优先采用C++11静态方案,旧环境使用双检锁,注意内存管理和析构问题。C++17的inline变量可简化饿汉式实现,但不影响懒汉式的最佳实践选择。原创 2025-06-06 08:32:11 · 417 阅读 · 0 评论 -
设计模式之单例模式
单例模式(Singleton Pattern)是一种创建型设计模式,确保一个类只有一个实例,并提供全局访问点。在C++中,实现单例模式需要考虑到线程安全、延迟初始化以及避免全局对象初始化顺序问题等因素。原创 2024-11-15 18:08:11 · 1244 阅读 · 0 评论 -
【设计模式】同一个例子对比工厂不同模式
简单工厂关注参数化实例化,工厂方法实现多态扩展,抽象工厂保证产品族兼容性,模板工厂支持运行时动态注册。原创 2025-05-20 15:53:35 · 416 阅读 · 0 评论 -
【设计模式】工厂模式之模板工厂模式详解
模板工厂模式(Template Factory)是泛型编程与工厂模式的完美结合,利用C++模板特性实现编译期多态和零开销抽象,尤其适合高性能、强类型场景。原创 2025-05-18 07:20:28 · 963 阅读 · 0 评论 -
【设计模式】结构型模式之代理模式深度解析
代理模式(Proxy Pattern)是一种结构型设计模式,通过引入代理对象间接访问目标对象,实现访问控制、功能增强、位置抽象和资源管理等核心功能。其核心公式为“客户端→代理→目标对象”,通过代理层实现透明性与可控性的统一。原创 2025-05-10 05:33:50 · 671 阅读 · 0 评论 -
【设计模式】结构型模式之享元模式深度解析
享元模式(Flyweight Pattern)是一种通过对象共享来优化内存使用的设计模式,特别适用于存在大量相似对象的场景。其核心思想是分离对象的内在状态(不变)与外在状态(可变),通过共享不变的内在状态,减少内存占用,将指数级内存增长转为线性增长。享元模式的关键角色包括抽象享元接口、具体享元、享元工厂和客户端。在C++实现中,享元模式可以用于大规模粒子系统等场景,通过共享粒子类型属性来优化内存和性能。典型应用场景包括游戏开发、文本编辑器、CAD/CAM系统、Web应用和物联网。享元模式通过合理应用,可以显原创 2025-05-09 14:49:20 · 603 阅读 · 0 评论 -
【设计模式】结构型模式之组合模式深度解析
组合模式(Composite Pattern) 是处理树形结构的利器,通过统一接口让客户端以一致的方式处理单个对象与对象组合,实现"部分-整体"的层次结构管理。其本质是递归算法的面向对象实现,广泛应用于需要树状数据结构的场景。原创 2025-05-06 08:21:23 · 964 阅读 · 0 评论 -
【设计模式】结构型模式之装饰器模式深度解析
装饰器模式(Decorator Pattern) 是一种动态扩展对象功能的灵活方案,通过组合代替继承,在不修改原有类的前提下,为对象层层叠加新功能,完美践行开放-封闭原则(OCP)。原创 2025-04-30 16:55:00 · 672 阅读 · 0 评论 -
【设计模式】结构型模式之桥接模式深度解析
桥接模式(Bridge Pattern) 是解耦抽象与实现的利器,通过组合代替继承,允许两个变化维度(抽象层与实现层)独立扩展,避免多层继承导致的类爆炸问题。原创 2025-04-29 11:15:53 · 959 阅读 · 0 评论 -
【设计模式】结构型模式之适配器模式详解
适配器模式是一种 结构型设计模式,其核心作用是 将不兼容的接口转换为客户端期望的接口,如同现实世界中的电源转接器。该模式通过创建 中间转换层 解决接口不匹配问题,实现不同系统间的协同工作。原创 2025-04-28 09:12:52 · 315 阅读 · 0 评论 -
【设计模式】结构型模式的综述
结构型模式(Structural Patterns)专注于如何通过 组合对象和类 来构建灵活、可扩展的软件架构,解决对象间关系复杂性的核心问题。原创 2025-04-27 11:29:19 · 876 阅读 · 0 评论 -
【设计模式】工厂模式之抽象工厂详解
抽象工厂模式(Abstract Factory Pattern)是创建型设计模式的集大成者,专为创建相关或依赖对象的家族而设计,无需指定具体类。原创 2025-04-26 07:14:11 · 835 阅读 · 0 评论 -
【设计模式】工厂模式之工厂方法详解
工厂方法模式是构建灵活对象创建系统的基石,特别适合需要长期维护和扩展的中大型项目。原创 2025-04-26 07:09:21 · 937 阅读 · 0 评论 -
【设计模式】工厂模式之简单工厂模式详解
简单工厂模式是理解更复杂工厂模式的基础,适合作为设计模式学习的切入点。在实际工程中,建议结合项目规模和发展预期选择合适方案。原创 2025-04-26 07:06:25 · 538 阅读 · 0 评论 -
【设计模式】工厂模式的不同类型、实现方法或应用场景
工厂模式是创建型设计模式的经典实现,主要用于解耦对象的创建和使用。原创 2025-04-25 20:59:22 · 790 阅读 · 0 评论 -
深入浅出之动态内存(new,malloc深度分析)
1. 关键字、操作符与库函数关键字是编译器保留的文字,不能被用户拿来重新声明,像const, new, if等等 操作符必须要有操作对象,操作符本质上可以视为编译器内置的基础的函数。操作符在c++中,可以被重载(除了部分例外,比如 . :: sizeof)。 库函数是编写在编译器头文件库里,要包含头文件才能调用的封装函数。2.自由存储区与堆的区别堆(heap)是C语言和操作系统的术语。堆是操作系统所维护的一块特殊内存,它提供了动态分配的功能,当运行程序调用malloc()时就会从中分配,稍..原创 2021-11-04 10:19:27 · 2396 阅读 · 0 评论 -
深入浅出设计模式原则之迪米特法则(LoD)
下面以“明星与经纪人的关系实例”为例来说明迪米特法则原则的应用分析:明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如与粉丝的见面会,与媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则,其类图如图 1 所示。图1 明星与经纪人的关系图#include <QCoreApplication>#include <iostream>/*! * \brief Star class */class Sta.原创 2021-01-10 21:07:07 · 1133 阅读 · 1 评论 -
深入浅出设计模式原则之接口隔离原则(ISP)
下面以学生成绩管理程序为例介绍接口隔离原则的应用。分析:学生成绩管理程序一般包含插入成绩、删除成绩、修改成绩、计算总分、计算均分、打印成绩信息、査询成绩信息等功能,如果将这些功能全部放到一个接口中显然不太合理,正确的做法是将它们分别放在输入模块、统计模块和打印模块等 3 个模块中,其类图如图 1 所示。图1 学生成绩管理程序的类图#include <QCoreApplication>#include <iostream>/*! * \brief 输入模块 */原创 2021-01-10 19:58:07 · 426 阅读 · 1 评论 -
深入浅出设计模式原则之依赖倒置原则
下面以“顾客购物程序”为例来说明依赖倒置原则的应用。【例1】依赖倒置原则在“顾客购物程序”中的应用。#include <QCoreApplication>#include <iostream>//! shopclass Shop{public: virtual std::string Sell() = 0;};class ShaoguanShop:public Shop{public: std::string Sell(){原创 2021-01-10 15:53:47 · 590 阅读 · 1 评论 -
深入浅出设计模式原则之里氏代换原则(Liskov Substitution Principle)
一、里氏替换原则(源自里氏替换原则——面向对象设计原则)1.1 里氏替换原则的定义里氏替换原则(Liskov Substitution Principle,LSP)由麻省理工学院计算机科学实验室的里斯科夫(Liskov)女士在 1987 年的“面向对象技术的高峰会议”(OOPSLA)上发表的一篇文章《数据抽象和层次》(Data Abstraction and Hierarchy)里提出来的,她提出:继承必须确保超类所拥有的性质在子类中仍然成立(Inheritance should ensure th原创 2021-01-09 15:34:26 · 502 阅读 · 0 评论 -
深入浅出设计模式原则之开闭原则(OCP)
一、开闭原则(源自开闭原则——面向对象设计原则)1.1 开闭原则的定义开闭原则(Open Closed Principle,OCP)由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出:软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but closed for modification),这原创 2021-01-09 14:51:29 · 551 阅读 · 1 评论 -
深入浅出设计模式原则之单一原则(SRP)
一、单一职责原则简介1.1 单一职责原则的定义单一职责原则(Single Responsibility Principle,SRP)又称单一功能原则,由罗伯特·C.马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中提出的。这里的职责是指类变化的原因,单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分(There should never be more than one reason for a class to change)。该原则提出..原创 2021-01-09 14:04:48 · 473 阅读 · 1 评论 -
深入浅出设计模式之设计模式简介
一、什么是设计模式(详见设计模式概念和七大原则)在GoF(Gang of Four)的书籍《Design Patterns - Elements of Reusable Object-Oriented Software(设计模式-可复用面向对象软件的基础)》中是这样定义设计模式的:Christopher Alexander说过:“每一个模式描述了一个在我们周围不断重复发生的问题以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动” [AIS+77,第10页]。尽管Alexand原创 2021-01-09 09:32:23 · 691 阅读 · 1 评论
分享