开放封闭原则(ocp)

2024-05-25 19:32
文章标签 开放 原则 ocp 封闭

本文主要是介绍开放封闭原则(ocp),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.开放封闭原则(ocp)

1.软件实体(类,函数)应该是可以扩展的,但是不可修改

- “对于扩展是开放的”行为是可以扩展的,当应用的需求改变时,可以对模块进行扩展,使其具有满足那些改变的新行为,可以改变模块的功能
- “对于更改是封闭的”对模块行为进行扩展时,不必改动模块的源代码,

2.ocp的手段:抽象化:

3.ocp实现:

a.封装变化

-什么会变化?封装
1.数据库模式
2.硬件变化
3.数据存储技术
-变化不应该分散在多个地方,而是封装在一个类中

b.预先策划,但是不需要时不实现

4.实例:
书店销售系统,计算购书总金额,根据会员的累计消费金额进行折扣,累计消费金额达到500打9.5折,1000元9折,2000元 8.5折
设计如下:

这样的设计会导致什么问题?

5.需求变更:

a.非会员一次性购书金额进行打折,300->9.5 ,500->9,按照上面的设计,必须要更改order类中的compTotal方法,增加if语句

b.项目完成后需求有变化了,对应单位会员的用户,达到2000->9折,3000->8.5,那么更改就会更多类了

6.重新设计

a.封装业务规则的变化

7.总结:

a.对扩展而开放

-对新的功能增加新代码,而不是修改已经存在的代码-在某处具体实现接口

b.对修改而封闭

-在设计中预期可能的修改

通过抽象,继承,多态增强易扩展性。

这篇关于开放封闭原则(ocp)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1002420

相关文章

[最全]设计模式实战(一)UML六大原则

UML类图 UML类图是学习设计模式的基础,学习设计模式,主要关注六种关系。即:继承、实现、组合、聚合、依赖和关联。 UML类图基本用法 继承关系用空心三角形+实线来表示。实现接口用空心三角形+虚线来表示。eg:大雁是最能飞的,它实现了飞翔接口。 关联关系用实线箭头来表示。当一个类"知道"另一个类时,可以用关联。eg:企鹅需要"知道"气候的变化,需要"了解"气候规律。 聚合关

读书·架构整洁之道(原则篇)

十四年不修行,只读书,一年通幽。二十日不解碑,只静坐,一日看尽前陵碑 ----- 猫腻《择天记》 一.设计与架构究竟是什么?二.SOLID设计原则SRP:单一责任原则(Single Responsibility Principle)OCP:开闭原则(Open Closed Principle)LSP:里氏替换原则(Liskov Substitution Principle)ISP

Spring框架的核心原则和IoC容器介绍

Spring框架是一个开源的应用程序框架,它遵循以下核心原则:   1.Inversion of Control(控制反转): Spring框架通过IoC容器管理对象的生命周期和依赖关系,而不是由程序代码直接创建对象。这样可以降低组件之间的耦合度,提高系统的灵活性和可维护性。 1.面向切面编程(AOP): Spring框架支持AOP,可以在不修改源码的情况下,增加新的功能,如日志、事务管理等

GitLab 代码下载和提交的权限开放

一、Gitlab 代码权限开放 1、下载权限 项目--->设置--->成员--->填写账号+配开发者权限,这样就有下载代码的权限了。如下图:   2、代码提交权限  在添加了成员后还得给成员开放代码提交的权限, 项目--->设置--->仓库--->Protected Branches--->选择分支master,设置Allowed to push 权限,这样就OK了,如下两图:

iOS 设计模式面试题(编程中的六大设计原则?)

编程中的六大设计原则? 1.单一职责原则 通俗地讲就是一个类只做一件事 CALayer:动画和视图的显示。UIView:只负责事件传递、事件响应。 2.开闭原则 对修改关闭,对扩展开放。 要考虑到后续的扩展性,而不是在原有的基础上来回修改 3.接口隔离原则 使用多个专门的协议、而不是一个庞大臃肿的协议 UITableviewDelegateUITableViewDataSource

快手可灵大模型开放视频续写功能,可生成最长约3分钟视频

6月21日,可灵再度进化,正式推出图生视频功能,支持用任意静态图像生成5s视频,并且可搭配不同的文本内容,实现丰富的视觉叙事 。 同时,可灵还发布了业内领先的视频续写功能,可为已生成的视频(含文生视频及图生视频)提供便捷的一键续写和连续多次续写,将视频最长可延伸至约3分钟,充分显示了可灵强大的想象力与精细的可控性,极大地拓展了视频大模型的创作边界。 化静为动,按需定制视觉叙事 此前,“可灵”

实现编程理论的六个原则④对称性

是什么 对称性一般指事物中对某种变换保持不变的性质。以图形中的对称性来说,“轴对称”就是“镜面对称”,“点对称”就是“旋转对称”。 编程中的对称性要比图形中的对称性抽象的多,编程中的对称性是指相同思路的代码在任何地方都以相同的形式表现出来。 简单来说,就是组内的等级整理。同类的东西,也就是拥有相同性质的东西,要用相同的等级来表现。 为什么 在代码中明确表现出对称性后,代码的可读性大幅提高

实现编程理论的六个原则③逻辑与数据的一体化

是什么 逻辑与数据的一体化是指把逻辑和逻辑处理的数据放在相近的位置。 所谓相近的位置,指的是在同一个函数或同一个模块内。距离越近,代码的质量就越高。 为什么 修改代码时往往需要同时修改逻辑与该逻辑处理的数据。 因此,如果把二者放在同一位置,我们要阅读代码就会减少,修改也不会波及其他元素。从结果来看,这么做降低了修改成本。 怎么做 我们要把数据与逻辑放在相近的位置。 不过,我们很难一

实现编程理论的六个原则②重复最少化

是什么 重复最少化,就是指极力消除重复。 许多技术都以实现重复最少化为目标,函数化技术就是其中之一,该技术将重复的逻辑函数化,整合成一段共享代码来使用。 为什么 通过复制、粘贴让同一段代码出现在多个位置时,如果有一个地方进行了修改,我们就必须检查其他地方,判断各处是否需要修改,这个判断很难把握,并不是全部替换就万事大吉了,而且检查时不能只看复制部分,其周围的部分也要检查,只有这么做才能正确

实现编程理论的六个原则①效应局部化

是什么 效应局部化中的“效应“是指修改带来的影响。 效应局部化是指修改带来的影响控制在局部。 效应局部化是一个很重要的原则。围绕该原则产生了许多技术,模块化就是其中之一。模块化技术的目标之一就是让修改模块所带来的影响停留在该模块的内部。 为什么 在效应非局部化的情况下,某处修改会对其他完全不相关的地方造成影响,使修改成本大幅增加。 这是如果我们知道哪些地方受到影响,或许还有救。然而在大