当前位置: 首页 > news >正文

设计模式七大原则附C++正反例源码

设计模式的七大原则是软件设计的基石,它们指导开发者构建高内聚、低耦合、易维护、可扩展的系统。以下以C++为例,详细介绍这七大原则:

一、单一职责原则(Single Responsibility Principle, SRP)

定义:一个类应该只有一个引起它变化的原因(即一个类只负责一项职责)。
目的:降低类的复杂度,提高代码复用性和可维护性。

反例(违反SRP):

一个类同时负责"用户数据管理"和"用户数据展示",当展示方式变化时,可能影响数据管理逻辑。

#include <string>
using namespace std;// 违反SRP:同时负责数据管理和UI展示
class User {
private:string name;
public:User(string n) : name(n) {}// 数据管理职责void save() { /* 保存用户到数据库 */ }// UI展示职责void display() { /* 在控制台打印用户信息 */ }
};
正例(遵循SRP):

拆分职责为两个类,各自负责单一功能:

#include <string>
using namespace std;// 仅负责数据管理
class UserManager {
private:string name;
public:UserManager(string n) : name(n) {}void save() { /* 保存用户到数据库 */ }
};// 仅负责UI展示
class UserDisplay {
private:string name;
public:UserDisplay(string n) : name(n) {}void show() { /* 在控制台打印用户信息 */ }
};

二、开放封闭原则(Open-Closed Principle, OCP)

定义:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
目的:在不修改现有代码的前提下,通过扩展实现新功能,减少风险。

反例(违反OCP):

添加新形状时,需要修改现有计算面积的函数:

#include <iostream>
using namespace std;enum ShapeType { CIRCLE, RECTANGLE };class Shape {
public:ShapeType type;// 违反OCP:添加新形状需修改此函数double calculateArea() {if (type == CIRCLE) {// 圆形面积计算} else if (type == RECTANGLE) {// 矩形面积计算}return 0;}
};
正例(遵循OCP):

通过抽象基类和继承扩展新功能,无需修改原有代码:

#include <iostream>
using namespace std;// 抽象基类(对修改关闭)
class Shape {
public:virtual double calculateArea() = 0; // 纯虚函数
};// 圆形(扩展开放)
class Circle : public Shape {
private:double radius;
public:Circle(double r) : radius(r) {}double calculateArea() override {return 3.14 * radius * radius;}
};// 新增矩形无需修改原有代码(扩展开放)
class Rectangle : public Shape {
private:double width, height;
public:Rectangle(double w, double h) : width(
http://www.dtcms.com/a/351240.html

相关文章:

  • 学习嵌入式的第三十八天
  • 【网络安全】XSS漏洞——PortSwigger靶场-DOM破坏
  • 常见的 Loader 和 Plugin?
  • 观察者模式 (Observer Pattern)与几个C++应用例子
  • Visual Basic 数据类型应用示例
  • EasyExcel 3.x 导出动态表头,动态sheet页
  • 国产化Excel开发组件Spire.XLS教程:Python 读取 CSV 文件,从基础到进阶指南
  • C shell 学习
  • AI出题人给出的Java后端面经(二十仨)(不定更)
  • 线性代数中矩阵等价与离散数学中关系的闭包之间的关联
  • dapo:开源大规模llm强化学习系统的突破与实现
  • AI提示词30天入门培训计划
  • STM32物联网项目---ESP8266微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制---MQTT篇(三)
  • 【密集目标检测】停车场车辆(车位)识别数据集:12k+图像,yolo标注
  • 从GPT-5发布来分析LLM大模型幻觉收敛(一)
  • 广告网站与Coze智能体集成
  • 节能率的图表组件的选择
  • MT** 时间指标全景图:从可靠性到可维护性的度量体系
  • PEFT 模型解析(59)
  • Linux 详谈库制作与原理
  • python中生成器
  • 解决qt5.9.4和2015配置xilinx上位机报错问题
  • 学习游戏制作记录(保存装备物品技能树和删除存档文件)8.26
  • 【软考论文】论静态测试方法及其应用
  • 系统设计中的幂等性
  • QPSK调制解调通信仿真程序调试与分析
  • UbuntuV24.04安装mpdecimal库(libmpdec),从源码编译
  • 广告推荐模型3:域感知因子分解机(Field-aware Factorization Machine, FFM)
  • 机器人 - 无人机基础(6) - 状态估计(ing)
  • 1 线性模型