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

软件设计原则之OCP开闭原则

(OCP) 开闭原则 Open Closed Principle核心原则对扩展开放对修改关闭。场景描述还是拿 UserInfo 进行举例。在开发过程中我们需要对我们使用的对象进行多步的组合操作比如这里要打印账户和密码信息。常规的方式就是在外部直接进行调用或者在类的内部添加新的 to_string() 方法。#include ctime #include iostream #include string class UserInfo { private: std::string username; std::string password; public: UserInfo(const std::string name, const std::string pwd) { username name; password pwd; } std::string get_username() const { return username; } std::string get_password() const { return password; } }; int main() { UserInfo user(Tom, 123456); // 希望 UserInfo 有个to_string() 的方法 std::cout name user.get_username() \n; std::cout pwd user.get_password() \n; }问题暴露如果这是你一个人开发的内容那直接在 UserInfo 中添加接口没人会管你。但是当你在一个大型团队中进行多人协同开发的时候并不是你想直接在别人的类添加代码就能添加的。这就是所谓的要对修改进行关闭。一个比较合理的方式就是在模块的外部进行功能的扩充这里编写一个全局的 to_string() 函数来满足我们的需求。#include iostream #include sstream #include string // 修改关闭 // 类模块不做任何改动 class UserInfo { private: std::string username; std::string password; public: UserInfo(const std::string name, const std::string pwd) { this-username name; this-password pwd; } std::string get_username() const { return username; } std::string get_password() const { return password; } }; // 开放关闭 std::string to_string(const UserInfo user) { std::stringstream ss; ss name user.get_username() \n; ss pwd user.get_password() \n; return ss.str(); } int main() { UserInfo user(Tom, 123456); std::cout to_string(user); }

相关文章:

软件设计原则之OCP开闭原则

(OCP) 开闭原则 Open Closed Principle核心原则对扩展开放,对修改关闭。场景描述还是拿 UserInfo 进行举例。在开发过程中我们需要对我们使用的对象进行多步的组合操作,比如这里要打印账户和密码信息。常规的方式就是在外部直接进行调用,或者…...

EDA平台化架构:电子系统设计的未来趋势

1. 电子系统设计演进:从工具链到平台化架构在电子设计自动化(EDA)领域,过去三十年最显著的变化莫过于设计工具架构的演进。早期工程师使用独立的原理图工具、PCB布局工具和仿真工具,通过文件导入导出的方式串联起整个设…...

开源代理解决 DeepSeek V4 与 Claude Code 的三个兼容性陷阱解决方案

在使用 Claude Code 的过程中,Anthropic 官方 API 的调用成本和网络问题一直是个痛点。DeepSeek V4 提供了兼容 Anthropic 格式的 API,价格优势明显,但实际对接时存在若干协议层面的差异,直接使用的话在进行 Agent spawn 工具调用…...

文科生被AI替代前,应该主动去碰的一个认证方向

在AI全面渗透职场的当下,文科生想要跳出被动淘汰的困境,无需硬啃编程、算法等硬核理工内容,最优破局方式是依托自身文字、逻辑、共情、场景把控的优势,驾驭AI工具实现能力升级。而目前适配文科生、零门槛、重实操、高认可度的最优…...

2026年,性价比超高的直播代运营供应商究竟哪家强?

在直播电商行业持续火爆的当下,众多品牌都希望借助直播代运营服务来提升销售业绩和品牌影响力。然而,市场上直播代运营供应商众多,质量参差不齐,如何选择一家性价比超高的供应商成为了品牌方的一大难题。今天,就为大家…...

如何用SketchUp STL插件轻松实现3D打印:从设计到实物的完整指南

如何用SketchUp STL插件轻松实现3D打印:从设计到实物的完整指南 【免费下载链接】sketchup-stl A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export. 项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl 你…...

终极指南:Awoo Installer - Nintendo Switch游戏安装的免费开源解决方案

终极指南:Awoo Installer - Nintendo Switch游戏安装的免费开源解决方案 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 还在为Switch游…...

Let‘s Encrypt证书有效期缩短至90天后,如何实现自动续期

Let’s Encrypt证书有效期缩短至90天后,如何实现自动续期 打开网站突然发现浏览器地址栏一把红色小锁,提示"您的连接不是专用连接"——SSL证书过期了。这可能是站长最不想看到的画面之一:用户无法正常访问、搜索引擎排名下降、甚至…...

5分钟解决Windows热键冲突:Hotkey Detective完全指南

5分钟解决Windows热键冲突:Hotkey Detective完全指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否曾经…...

让老旧游戏手柄重获新生:XOutput游戏手柄兼容工具使用指南

让老旧游戏手柄重获新生:XOutput游戏手柄兼容工具使用指南 【免费下载链接】XOutput DirectInput to XInput wrapper 项目地址: https://gitcode.com/gh_mirrors/xo/XOutput 还在为心爱的老手柄无法玩新游戏而烦恼吗?XOutput是一款专门解决Direct…...

Ascend NPU高效无损压缩技术解析与优化

1. 项目概述:Ascend NPU上的高效无损压缩技术在AI模型规模爆炸式增长的今天,模型权重的存储与传输已成为系统瓶颈。以Qwen3-32B模型为例,其65.6GB的权重文件在分布式训练中会产生显著的通信开销。传统CPU/GPU压缩方案如ZipNN(1.5GB/s)和NV-Bi…...

TypeScript 泛型详解:定义、使用、特点优势、泛型约束与泛型数据类型

在 TypeScript 开发中,泛型是实现类型复用、类型安全、解耦代码的核心特性,能够告别 any 类型带来的类型丢失问题,让组件、函数、数据类型具备适配多类型且保留类型校验的能力。本文按照规范代码缩进、命名、空格、格式书写风格,全…...

ASL1架构规范语言:Arm处理器设计的核心工具

1. ASL1架构规范语言概述ASL1(Architecture Specification Language)是Arm公司专为处理器架构设计开发的领域特定语言(DSL),主要用于精确描述Arm架构参考手册中的指令集行为。这种语言在2025年发布的A-profile架构参考…...

OpenViking:云原生AI场景下的高性能可观测性数据采集框架深度解析

1. 项目概述:从“OpenViking”看云原生时代的开源探索最近在云原生和AI基础设施的圈子里,一个名为“OpenViking”的项目开始引起一些讨论。这个由火山引擎(volcengine)开源的项目,名字本身就带着一股探索和开拓的意味。…...

大跨度异型电动挡烟垂壁技术研发与工程应用研究

当前商业综合体、交通枢纽、会展场馆、大型厂房普遍采用大跨度、异形挑空设计,按消防规范需设置挡烟垂壁划分防烟分区,控制烟气蔓延。常规直线型、小跨度挡烟垂壁存在易变形、异型适配差、漏烟、运行不稳、验收难等问题,大跨度异型电动挡烟垂…...

不开刀、少痛苦!拱墅区这家公立肿瘤专科,中西医结合守护生命希望

面对肿瘤,你是否还在恐惧开刀创伤、担忧放化疗副作用?杭州市拱墅区人民中西医结合医院肿瘤一科,作为公立二级甲等医院重点专科,以 “微创消瘤、中西扶正” 为核心,走出一条低损伤、高疗效的抗癌新路,为无数…...

量子测量诱导相变在玻色系统中的实验实现

1. 量子测量诱导相变的理论基础量子测量诱导相变(Measurement-Induced Phase Transition, MIPT)是近年来量子多体物理领域的重要发现。这种相变不同于传统热力学相变,它完全由量子测量操作与酉演化之间的动态竞争所驱动。在玻色系统中&#x…...

量子门净化:突破2槽限制的3槽架构实现

1. 量子门净化:从理论到实践的关键突破量子计算领域面临的核心挑战之一是如何在噪声环境下保持量子门操作的精度。传统量子态净化技术虽然能提升静态量子资源的保真度,但对于动态执行的量子算法而言,我们需要更高阶的方法来直接处理操作本身的…...

企业如何通过Taotoken实现API密钥的统一管理与审计

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业如何通过Taotoken实现API密钥的统一管理与审计 在将大模型能力集成到企业业务流程的过程中,一个常见的挑战是如何安…...

输入流避坑全指南:从 Read() 编码溢出到 ReadLine() 缓冲区残留

1. 灵异事件:为什么我的循环跑了 52 次? 在编写基础逻辑题时,我曾遇到一个极其诡异的Bug:要求用户输入边长nnn打印正方形,我输入4,结果程序打印了 52行符号。 问题代码: int n Console.Read();…...

历史周期律的动力学本质:集体意识场视角下的文明演进规律

引言 历史周期律——王朝兴替、文明盛衰、社会变革的波浪式重复——是人类文明最令人困惑又最无法回避的现象。从司马迁的“天下大势,分久必合,合久必分”,到汤因比的文明挑战-回应理论,无数先贤试图揭示这一规律的底层逻辑。然而…...

开源技能图谱平台gotalab/skillport:构建可视化知识大脑的实战指南

1. 项目概述:一个技能图谱与知识管理的开源利器 在信息爆炸的时代,无论是个人学习成长,还是团队知识沉淀,我们常常面临一个核心痛点: 知识是零散的、孤立的,难以形成体系,更难以高效复用 。你…...

故障诊断创新算法之【先验知识+协同学习】基于故障特征掩码引导和潜在特征拆分的自编码器机械故障诊断(PyTorch)

小样本条件下,纯数据驱动方法很容易陷入过拟合和特征盲目提取,所以提出一种物理引导的深度诊断范式:将轴承内圈、外圈、滚动体的故障特征频率先验显式编码为故障特征掩码,并引入Huber函数构建先验引导损失,迫使网络学习…...

SVG 滤镜:全面解析与高效应用

SVG 滤镜:全面解析与高效应用 引言 SVG(可缩放矢量图形)作为一种广泛使用的图形格式,因其具有高度的可缩放性和跨平台性而备受青睐。SVG 滤镜作为 SVG 的一项强大功能,能够实现丰富的图形效果,提升图形的表…...

【日常小问】解决 Jenkins 部署 Spring Cloud 微服务到 Docker 容器启动失败的问题

一、问题出现在使用 Jenkins 进行 CI/CD 部署 Spring Cloud 微服务项目时,遇到了一个让人头疼的问题:所有通过 Jenkins 构建的 Docker 容器启动后立即退出,状态码为 Exited (1)。查看容器日志,报错信息如下:**********…...

基于 base-admin 人事管理系统开源项目学习与功能扩展实战笔记

最近跟着课程实战拆解了base-admin 人事管理系统开源项目,这是一款基于 SpringBoot 搭建的企业级后台管理平台,遵循 Apache 2.0 开源协议,非常适合 Java 后端和软件工程入门练手。项目整体采用经典三层架构,Controller、Service、…...

参考文献列表(近现代当代中国篇)

参考文献列表(近现代当代中国篇)0. 无。为什么是空的?——因为鄙视。岐金兰鄙视近现代当代中国绝大多数思想者。不是个人恩怨,不是学术门户,而是对“构建学术实体”这一集体执念的鄙视。他们中的大多数,终其…...

STM32F4的DSP库怎么在CLion里用起来?保姆级CMake配置指南(含FPU开启)

STM32F4的DSP库在CLion中的完整CMake配置指南(含FPU优化) 第一次在CLion里看到STM32的DSP库报错时,我盯着满屏的"undefined reference"发了半小时呆。作为从Keil转战CLion的老嵌入式开发者,我太清楚DSP库在信号处理项目…...

AXI4协议实战:从零构建一个支持突发传输的从机接口

1. AXI4协议基础与从机接口设计概述 AXI4协议作为AMBA总线家族中最核心的成员,已经成为现代SoC设计中事实上的标准互联规范。我第一次接触AXI4是在2015年设计图像处理芯片时,当时为了连接DMA控制器和DDR控制器,不得不硬着头皮研究这个看似复杂…...

聊聊我是怎么用Claude code来学习项目的吧

首先我和许多大学生一样我对项目这个的概念理解为零,但是我比较喜欢研究ai,我喜欢用ai去帮我写一些小项目啊,小游戏啊,还有一些脚本,像一些国外的cursor,国内的treat,还有Claude code我基本都玩…...