《java与模式》笔记(二) 开闭原则

设计模式六大原则(二)--开闭原则 开闭原则(Open/Closed Principle,简称OCP)是软件设计原则中的一个重要原则,它指出:“软件实体(如类、模块、函数等)应该对扩展开放,对修改封闭。”这意味着我们应该设计出这样的软件实体,它们可以在不改变原有代码的基础上进行扩展和修改。 开闭原则是一种面向对象设计中非常重要的原则,它可以帮助我们设计出更加灵活、可维护和可重用的软件系统。遵循开闭原则有助于提高软件的可扩展性和可维护性,使软件能够更好地适应变化的需求。 阅读详情

ξ 4.1 什么是开闭原则

☆ 开闭原则指的是一个软件实体应对对扩展开发,对修改关闭(Software entities should be open for extension, but closed for modification)。这个原则是说在设计一个模块的时候,应对使这个模块可以在不被修改的前提下被扩展,换言之,应对可以不必修改源代码的情况下改变这个模块的行为。

☆ 满足开闭原则的软件系统的优越性:
① 通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性。
② 已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的软件系统有一定的稳定性和延续性。

ξ4.2 实现开闭原则的关键
抽象化是解决问题的关键,在面向对象的编程语言里,可以给系统定义出一套相对较为固定的抽象设计,此设计允许无穷无尽的行为在实现层被实现。在语言里,可以给出一个或多个抽象类或者接口,规定出所有的具体类必须提供的方法的特征作为系统设计的抽象层。这个抽象层预见了所有的可扩展性,因此,在任何扩展情况下都不会改变。这就使得系统的抽象不需要修改,从而满足了开闭原则的第二条,对修改关闭。
同时,由于从抽象层导出一个或多个新的具体类可以改变系统的行为,因此系统的设计对扩展是开放的,这就满足了开闭原则的第一条。

☆ 对可变性的封装原则
这是对开闭原则的另外一种描述,它讲的是找到一个系统的可变因素,将之封装起来。该原则意味着两点:
① 一种可变性不应当散落在代码的很多角落,而应当封装到一个对象里面。继承应当被看做是封装变化的方法,而不应该被认为是一种从一般对象生成特殊对象的方法。
② 一种可变性不应当与另外一种可变性混合在一起。这意味着一般的继承层次不会超过两层。

关键知识点:
☆ 开闭原则的概念,软件实体对扩展开发,对修改关闭;
☆ 实现开闭原则的关键,利用接口或抽象类抽象出系统的抽象层,抽象层不变,利用实现层进行扩展;
☆ 对可变性的封装,将可变的元素封装起来,防止改变扩散到整个应用;
☆ 注意控制封装的粒度,不要将两种可变性封装到一起;
☆ 继承是用来封装可变性的,一般的继承层次不要超过两层;
☆ 策略模式是对开闭原则的很好诠释,其他还有工厂模式、建造模式、桥接模式、门面模式、调停者模式、访问者模式和迭代子模式等;
☆ 对“将条件转移语句改写成多态性”的重构行为应当遵循开闭原则,防止多态性污染;
☆ java下的单方法接口通常用来实现函数指针或者委托的功能;
☆ 任何一棵继承树都要以抽象类为根,具体类不是用来继承的,更不要从工具类继承;
☆ 抽象类要拥有尽可能多的共同代码,同时拥有尽可能少的数据。
☆ 当Coad条件全部满足时,才应当考虑使用继承:派生类是基类的一个特殊种类,而不是其的一个角色,也就是说要区分“Has-a”和“Is-a”;永远不会出现需要将派生类换成另外一个类的派生类的情况;派生类具有扩展基类的责任而不是具有置换或注销基类的责任;只有在分类学角度上有意义时,才可以使用继承。 

 

【23种设计模式】开闭原则 开闭原则(Open Closed Principle),简写为 OCP。软件实体(模块、类、方法等)应该"对扩展开放、对修改关闭一个很明显的例子就是——策略设计模式对扩展开放、对修改关闭。当我们需要添加一个新的功能时,应该在已有代码基础上扩展代码(新增模块、类、方法等),而非修改已有代码(修改模块、类、方法等)。开闭原则并不是不让我们修改代码,而是让我们尽量避免"大修大改",设计模式是方法,是套路,而不是"枷锁"!!! 阅读详情

相关推荐

【愚公系列】面向对象设计原则(二)-开放闭合原则(Open-Closed Principle or OCP)

面向对象设计原则是一些通用的软件设计原则,用于指导软件设计人员开发高质量、可扩展、可维护的软件系统。这些原则的作用如下:提高软件系统的可维护性:遵循面向对象设计原则可以将代码分解为更小、更专注的模块,从而降低代码的复杂性和耦合度,提高系统的可读性和可维护性。提高软件系统的可扩展性:开放封闭原则可以帮助软件系统更容易地适应变化,降低对现有代码的影响,从而提高软件系统的可扩展性和灵活性。

愚公智库 47万+

开放封闭原则(Open Closed Principle)

在面向对象的设计中有很多流行的思想,比如说 “所有的成员变量都应该设置为私有(Private)”,“要避免使用全局变量(Global Variables)”,“使用运行时类型识别(RTTI:Run Time Type Identification,例如 dynamic_cast)是危险的” 等等。那么,这些思想的源泉是什么?为什么它们要这样定义?这些思想总是正确的吗?本篇文章将介绍这些思想的基础:开放封闭原则(Open Closed Principle)。 Ivar Jacobson 曾说过 “所有系统在其

u010001360的博客 1420

java设计模式2,开闭原则

开闭原则的核心思想是面向抽象编程,定义出接口并实现其方法,通过继承方式进行扩展,都可以体现出开闭原则。

学Java,找哪吒 3246

面向对象五大设计原则-开放封闭原则

1、开放封闭原则 开放封闭原则(Close Open Principle),是指软件应该对扩展开放,而对修改封闭。在软件的生命周期内,需求变化是客观存在的且不以人的意志而转移,而对应的软件也必须做相应的变化。 对扩展开放:意味着有新的需求或变化时,可以对现有的系统进行扩展,以适应新的情况。 对修改关闭:在扩展原有系统的功能时,只需增加新的代码,而不需要对原有的代码进行修改。 2、不合理的设计示例 – 超人的超能力 超人拥有这几项超能力,但是在特殊的环境下需要隐身的超能力时,超人就必须回炉重造。

u014354882的博客 1248

【深度强化学习】(2) Double DQN 模型解析,附Pytorch完整代码

Double DQN 算法是 DQN 算法的改进版本,解决了 DQN 算法过估计行为价值的问题。Double DQN 算法不直接通过最大化的方式选取目标网络计算的所有可能 Q 值,而是首先通过估计网络选取最大 Q 值对应的动作。在 Double DQN 框架中存在两个神经网络模型,分别是训练网络与目标网络。这两个神经网络模型的结构完全相同,但是权重参数不同;每训练一段之间后,训练网络的权重参数才会复制给目标网络。

博观而约取,厚积而薄发 1万+

电赛经验分享——赛前准备

⏩ 大家好哇!我是小光,想要成为系统架构师的嵌入式爱好者。⏩在之前的电赛中取得了省一的成绩,本文对电赛比赛前需要准备什么做一个经验分享。加入小光嵌入式交流群(qq群号:737327353)免费获取博主所有资料哦!

qq_52608074的博客 7779

面向对象7大原则

单一职责:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 开放闭合原则:开闭原则就是指软件实体应当尽量保证在不修改原有代码的情况下,对软件进行扩展。开闭原则是面向对象设计的基石。 里氏替换原则:根据“运行时子类对象覆盖父类对象”的特点保证继承关系的正确性 依赖倒置:1)抽象不依赖细节,细节依赖抽象(面向接口的一种体现形式)2)高级模块不依赖于低层模块,应该二者依赖于抽象 ...

u011791378的专栏 898

VCS HVP与验证计划planner:数字IC验证环境搭建与收敛实践

在数字IC验证中,VCS 是广泛使用的编译型仿真器,HVP 通常指面向硬件验证平台的高性能编译选项集,用于开启 SystemVerilog 类、随机约束和 NTB 等能力;planner 则指验证计划管理,核心是把功能点与测试用例、覆盖点建立映射。理解 VCS 先编译后仿真的原理,有助于优化增量编译、调试访问和覆盖率采集,提升回归收敛效率。规划驱动让激励不再散落,设计改版时能快速定位受影响用例,交接和覆盖率收敛更有依据。无论是 UVM 环境搭建、编译参数选择,还是验证计划表维护,都需要把工具选项与规划方法结

weixin_42543046的博客 339

七大原则——开闭原则

开闭原则的定义 开闭原则(Open Closed Principle,OCP)由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出:软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but c...

m0_37654408的博客 6608

J-Flash手动添加华大HC32F460型号全攻略

在嵌入式开发中,Flash编程算法是连接调试工具与微控制器的重要桥梁,它定义了芯片存储器的擦除、编程和校验等底层操作规范。其原理是通过调试接口将算法代码加载到目标芯片的RAM中执行,从而实现对Flash存储器的访问与控制。这项技术的核心价值在于打破了工具链对芯片型号的固有支持限制,使得开发者能够灵活适配各种新兴或定制化的微控制器。在工程实践中,当面对J-Link等主流调试器官方支持包更新滞后时,手动添加芯片型号成为保障开发效率的关键技能。本文以华大半导体的HC32F460系列MCU为例,详细解析了如何通过配

weixin_29192365的博客 350

从梯度泄露到数据复原:DLG与iDLG算法实战解析

本文深入解析了DLG与iDLG算法在梯度泄露与数据复原中的实战应用,揭示了联邦学习中的隐私风险。通过详细代码示例和实验数据,展示了如何从梯度中复原原始训练数据,并探讨了梯度压缩、差分隐私等防御措施。文章特别强调了iDLG算法在标签破解中的高效性,为AI安全领域提供了重要参考。

weixin_30552811的博客 192

六大设计模式--OCP(开闭原则):构建可扩展软件的基石

某电商平台促销功能每次迭代都需要修改核心订单类,导致:✅ 双十一活动修改导致支付功能崩溃✅ 新人优惠引发会员系统连环故障✅ 每次发布需全量回归测试根本原因:系统架构违反开闭原则开闭原则(Open-Closed Principle, OCP)(软件实体应对扩展开放,对修改关闭)在电商平台的后续重构中:✔️ 促销需求平均交付周期从2周缩短至3天✔️ 订单系统故障率下降76%✔️ 新入职开发者快速上手促销功能开发OCP不是束之高阁的理论,而是工程师每天都要面对的实践选择。

z2637305611的博客 1092

避坑指南:Vue2中使用TinyMCE5常见问题解决方案(含PowerPaste插件异常处理)

本文针对Vue2项目中集成TinyMCE 5富文本编辑器时遇到的高频疑难问题,提供了一套深度实战解决方案。内容涵盖环境搭建、资源路径配置、图片与视频上传处理、以及替代PowerPaste插件的自定义粘贴清理方案,旨在帮助开发者有效规避常见陷阱,构建稳定可靠的内容编辑功能。

weixin_29012677的博客 155

设计模式六大原则之--开闭原则(OCP)

设计模式六大原则之--开闭原则(OCP)前言描述 前言 The Open - Closed Principle, OCP 软件尸体(类、模块、方法等)应该对扩展开放,但是对修改关闭。 描述 遵循开放-关闭原则设计出来的模块具有两个主要的特征。 “对扩展开放”(Open for extension) 这意味着模块的行为是可以扩展的。 当应用的需求改变是,我们可以对模块扩展,让它可以具备满足那些改变的新行为。换句话说,我们可以改变模块的功能。 “对更改关闭”(Closed for modification) 对

宁静致远的博客 2471

基于深度学习的人脸识别考勤管理系统,采用YOLOv11和Dlib算法实现人脸识别和考勤签到,前台人脸识别和签到系统 + 后台人脸和考勤管理系统,全网独发

基于深度学习的口罩人脸识别的考勤管理系统,采用YOLOv11和Dlib算法实现人脸识别和考勤签到,前台人脸识别和签到系统 + 后台人脸和考勤管理系统,全网独发

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1827

2023华为OD机试真题B卷 Python 实现【最长的元音子串长度】

定义当一个字符串只有元音字母(a,e,i,o,u,A,E,I,O,U)组成,称为元音字符串,现给定一个字符串,请找出其中最长的元音字符串,并返回其长度,如果找不到请返回0, 字符串中任意一个连续字符组成的子序列称为该字符串的子串

MISAYAONE的博客 902

【Java设计模式 经典设计原则】二 SOLID-OCP开闭原则

OCP是相对而言的一个概念,在不同代码粒度可能就是不同的结果,所以不能认为OCP就是不改代码,而是尽量让改动更上层,集中在非核心逻辑部分,一个判断依据就是当有新功能添加时不需要改之前的核心实现逻辑并且单元测试都能通。实现OCP的方式有很多,例如依赖注入、基于接口而非实现编程、多态以及各种设计模式。但核心指导思想则是,写代码时候要多思考,要时刻具备扩展意识、抽象意识、封装意识。

MaoLin Tian's Blog 714

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java设计模式——开闭原则(实例)

1、基本介绍 开闭原则是编程中最基础、最重要的设计原则 一个软件实体,如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节。 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化 编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则。 2、应用实例 绘图功能,类图如下: 2.1未遵循开闭原则 优点是比较好理解,简单操作。 缺点是违反了设计模式的ocp原则,即对扩展开放(提供方),对修改关闭(使用方)。即当给

走在bug的路上 8304

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

设计模式七大原则 - 开闭原则(Open-Closed Principle, OCP)

开闭原则(OCP)是面向对象设计的核心原则,强调软件实体应对扩展开放但对修改关闭。通过抽象与接口设计,允许新增功能模块而无需修改原有代码,从而降低维护成本、提升扩展性和复用性。实现方式包括策略模式、装饰器模式等设计模式,以及模块化隔离易变部分。反例展示了违反OCP的代码需频繁修改,而正例通过多态扩展功能。OCP适用于插件系统、微服务等场景,需与单一职责、依赖倒置等原则协同使用,同时避免过度抽象。该原则在稳定性和灵活性间取得平衡,是构建可维护系统的关键。

csdn_tom_168的博客 1181

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

开闭原则——举例说明Java设计模式中的开闭原则

开闭原则——举例说明Java设计模式中的开闭原则1.前言1.1 官方定义1.2 本文案例的业务场景2.举例说明2.1 正例(正在使用的业务场景)(1)类图(2)代码说明(3)测试(4)简单分析2.2 反例(在2.1上新增需求后的反例代码)2.2.1 新增需求内容2.2.2 针对两个需求的反例代码(1)针对需求1的(2)针对需求2的2.2.3 代码说明2.2.4 简单分析2.3 正例(解决2.2的问题)(1)类图(2)代码说明(3)测试3.总结3.1 作用3.2 怎么使用?3.3 总结4.附代码第一个例子第二

@素素~的博客 2723

设计模式 之 开闭原则(OCP) 详解

开闭原则(OCP) 详解 基本介绍: 1)开闭原则(Open Close Principle)是编程中最基础,最重要的设计原则 2)一个软件实体如类,模块和函数应该对拓展开放(对提供方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节。 3)当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化。 4)编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则。 案例举例: public interface MailService { void sendMsg(

qq_45273552的博客 1626

《Java与模式》笔记

《Java与模式》笔记 第四章                “开-闭”原则(OCP)         OCP:Open-ClosedPrinciple,说一个软件实体应该对扩展开放,对修改关闭,最早由BertrandMeyer提出,原文:Softwareentities should be open for extension, but closed for modification. OC

leon709的专栏 1017

开闭原则(OCP)解析:软件设计的扩展与修改之道

开闭原则(OCP)是面向对象设计中SOLID原则的核心组成部分,强调软件实体应对扩展开放而对修改关闭。这一原则通过抽象接口和设计模式实现系统架构的灵活性,策略模式和装饰器模式是典型实践。在电商促销、支付系统等应用场景中,OCP能显著提升代码复用率和系统稳定性。现代编程语言如Java的interface和TypeScript的类型扩展都提供了语法级支持。合理运用OCP可以降低代码耦合度,但需警惕过度设计,YAGNI原则是重要平衡点。在微服务架构和领域驱动设计中,开闭原则与领域事件、规约模式等结合,能构建更具弹

weixin_34293059的博客 532

一天一个设计模式——开闭原则

软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。对扩展开放:当需要添加新功能时,可以通过添加新代码(比如新类或新方法)来扩展系统。对修改关闭:已有代码(尤其是核心代码)不应该被修改,以避免引入错误或影响现有功能。开闭原则:对扩展开放,对修改关闭,通过抽象和多态实现灵活扩展。好处:降低维护成本、提高扩展性、增强复用性和测试性。实现方法:使用接口或抽象类,依赖抽象,结合策略模式、工厂模式等。初学者建议:从简单场景入手,识别变化点,定义接口隔离变化,逐步体会 OCP 的优势。

weixin_44547668的博客 1243

【设计模式】设计原则:OCP 开闭原则

开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节。可以提高软件系统的可复用性及可维护性。开 闭原则,是面向对象设计中最基础的设计原则。它指导我们如何建立稳定灵活的系统, 例如:我们版本更新,我尽可能不修改源代码,但是可以增加新功能。 在现实生活中对于开闭原则也有体现。比如,很多互联网公司都实行弹性制作息时间, 规定每天工作 8 小时。意思就是说,

A minor 368
上一篇: 《java与模式》笔记(一) 软件的可维护性和可复用性
下一篇: 《java与模式》笔记(三) 里氏替换原则
plusir
博客等级 码龄24年 11粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值