首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

模块函数扩展应该是开放,但对修改是封闭。...这意味着 应该用抽象定义结构,用具体实现扩展细节,以此确保软件系统开发维护过程可靠性。 开闭原则核心思想-----> 面向抽象编程。...---- Case 对于外部调用方来说,只要能体现出面向抽象编程, 定义出接口并实现其方法,即不修改原有方法体, 只通过继承方式进行扩展,都可以体现出开闭原则。..., 其中在圆形计算中 π取值是3.14 , 这也是要扩展精度方法体现开闭原则地方。...---- Bad Impl 不考虑开闭原则的话,也不考虑这个方法在整个工程中是使用情况的话,直接修改 π取值,这样做的话,无疑会破坏整个工程稳定性,带来一些风险。

29020

还不理解 OCP 开放程度?赶紧了解下

OCP 简介 开闭原则,是面向对象设计重要原则之一,其核心思想是:软件实体(类、模块、函数等)应该扩展开放,修改关闭。...设计模式 使用设计模式,如策略模式、观察者模式工厂模式等,来封装变化抽象变化部分。这些设计模式都是根据开闭原则思想而产生,可以帮助我们构建灵活、可扩展软件系统。...实在不行,就先把上面的简单工厂工厂方法模式看了,把OCP理解清楚~ 实践 OCP 例子 前面简单工厂模式(Simple Factory)工厂方法模式(Factory Method Pattern)...这违反开闭原则,因为我们应该扩展是开放修改是关闭。 为了符合开闭原则,我们可以使用多态来解决这个问题。...这提高了代码可维护性扩展性。 总结 开闭原则是面向对象编程基石之一。核心是:扩展开放,修改关闭。

17130
您找到你想要的搜索结果了吗?
是的
没有找到

设计模式:面向对象设计原则上(SRP、OCP、LSP)

在面向对象世界里,可以分为:面向对象基础知识、面向对象设计原则设计模式,如果用武侠小说来做比喻,基础知识就是需要练习基本功、设计原则就是内功心法、设计模式则是各种各样具体招式,所以说熟练掌握了设计原则...SOLID 原则指的是常用五个设计原则: 单一职责原则(SRP) 开放封闭原则OCP) 里氏替换原则(LSP) 接口隔离原则(ISP) 依赖倒置原则(DIP) 我们平时写代码会根据实际业务情况创建类方法...开放封闭原则OCP) 只要我们产品在进行迭代,就存在代码添加修改。只要存在代码修改,就会带来风险,OCP 原则让他们尽量保持稳定部分不变,如果需要添加新功能就使用扩展方式进行实现。...像我们熟悉 VS Code 编辑器,只要符合接口标准,就能够开发出各种各样插件,这就是典型面向扩展性设计,符合 OCP 原则。...由于篇幅原因,下一篇再介绍接口隔离原则(ISP)依赖倒置原则(DIP)。希望本文您有所帮助。

43410

设计模式学习--面向对象5条设计原则之开放封闭原则--OCP

软件实体应当扩展开放,修改关闭,即软件实体应当在不修改(在.Net当中可能通过代理模式来达到这个目的)前提下扩展。...如果我们在设计这个类时候坚持了OCP的话,把工资税公共方法抽象出来做成一个接口,封闭修改,在客户端(使用该接口类对象)只依赖这个接口来实现自己所需要工资税,以后如果系统需要增加新工资税,只要扩展一个具体国家工资税实现我们先前定义接口...,软件升级时可以只部署发生变化部分,而不会影响其它部分; 四、使用OCP注意点: 1、实现OCP原则关键是抽象; 2、两种安全实现开闭原则设计模式是:Strategy pattern(策略模式...),Template Methord(模版方法模式); 3、依据开闭原则,我们尽量不要修改类,只扩展类,但在有些情况下会出现一些比较怪异状况,这时可以采用几个类进行组合来完成; 4、将可能发生变化部分封装成一个对象...对于行为,如果是基本不变,则可以直接作为对象方法,否则考虑抽象或者封装这些行为; 5、在许多方面,OCP是面向对象设计核心所在。

70280

JAVA 编程中SOLID设计原则:SRP,单一职责原则 OCP开闭原则 LSP,里氏替换原则 ISP,接口隔离原则 DIP,依赖倒置原则

而一个遵循着好开发规范以及拥有着良好设计原则系统,往往可以节约大量后期维护升级成本。说起设计,往往大家第一反应是设计模式,殊不知,二十几种设计其实都遵循着一些基本设计原则。...S.O.L.I.D,是事实证明良好设计原则。...OCP开闭原则 OCP states that objects or entities should be open for extension, but closed for modification...那岂不是要更改每一处该对象行为引用地方,再检查逻辑是否因此变化,还得再做一堆测试,凭空增加了工作量。...遵循良好设计原则,有利于我们平常在开发中写出更可维护代码,便于团队协作也有利于后来者。道理上讲,设计模式设计原则等等,也理应成为OOP程序员之间常用术语,这样一来,才能显得更具专业性。

7810

23种设计模式之简单工厂

1 写在前面的话 今天我们正式学习23种设计模式工厂模式,这个模式主要分为三类(简单工厂模式,工厂方法模式,抽象工厂模式),我会分章给大家讲解。 首先来说说工厂模式到底有啥用?...它主要作用在于实现了创建者调用者分离,啥子意思呢?也就是说我们调用者去创建实例时不会创建这个实例直接联系。 其核心本质就是实例化对象,用工厂方法代替new操作。...2 简单工厂模式 –所谓简单工厂模式 • 用来生产同一等级结构中任意产品。...(对于增加新产品,需要修改已经写好代码) 简单工厂模式是最简单工厂模式也是使用最多工厂模式,但是它仍然有不足-即违反了面向对象OCP原则(开闭原则):一个软件实体应该拓展开发,修改关闭...但是上面也说过,这种方法存在缺点就是违反了面向对象原则OCP原则,如果我们再添加一种动物,那么我们必须去修改AnimalFactory里面的代码。

29320

漫谈模式违反S.O.L.I.D设计原则示例

今天我们来看下违反设计原则示例。...这样,当需要修改钱包操作时,只需修改Wallet类即可,而不会影响到Person类实现。开闭原则意图开闭原则就是说对扩展开放,修改关闭。...违反OCP原则示例如果在一个类中使用了switch语句来判断不同情况,当需要添加一个新情况时,必须修改源代码,这是违反OCP。符合OCP原则示例那么为了满足开闭原则,需要怎么做呢?...那就要对系统采用抽象化设计。抽象化是开闭原则关键。这个示例遵循OCP原则,因为它将支付方式处理逻辑封装在不同实现了Payment接口类中。...我们有两个实现类DogBird,它们分别实现了需要接口。这个设计符合ISP原则,因为每个接口只包含所需方法,没有多余方法。这样,我们可以根据需要选择实现哪个接口,而不需要实现不需要方法。

66160

开发那么久,才知道 SOLID 设计原则

相关设计模式 面对违背单一职责原则程序代码,我们可以利用外观模式,代理模式,桥接模式,适配器模式,命令模式已有设计进行重构,实现多职责分离。...O:开闭原则 (OCP) 基本概念 开闭原则 (OCP) 英文全称为 Open-Closed Principle,基本定义是软件中对象(类,模块,函数等)应该对于扩展是开放,但是对于修改是封闭。...相关设计模式 面对违背开闭原则程序代码,可以用到设计模式有很多,比如工厂模式,观察者模式,模板方法模式,策略模式,组合模式,使用相关设计模式关键点就是识别出最有可能变化扩展部分,然后构造抽象来隔离这些变化...相关设计模式 关于依赖倒置原则,可以用到设计模式工厂模式,模板方法模式,策略模式。 小结 依赖倒置原则可以减少类间耦合性,提高系统稳定性,降低并行开发引起风险,提高代码可读性可维护性。...结语 到这里,SOLID 设计原则就全部介绍完了,本文主要目的还是这六项原则系统地整理总结,在后续程序设计开发过程中能有意识地识别出设计原则模式

66910

设计模式总结

设计模式总结 1.1. SOLID原则 1.1.1. 单一责任原则(SRP) 当修改某个类时候,原因有且只有一个,也就是让一个类只做一种类型责任 1.1.2....开放封闭原则OCP) 软件实体应该是可扩展但不可修改 1.1.3. 里氏替换原则(LSP) 子类实例应该能够替换任何其超类实例 1.1.4....简单工厂模式 违反了开放封闭原则,扩展需要修改工厂类 1.3. 工厂模式 ? 1.4. 抽象工厂 创建工厂工厂 ? 1.5....三种工厂方式区别 简单工厂,在工厂内部创建不同产品,不符合5大设计原则开闭原则 工厂模式设计上每一产品都有自己工厂,每创建一个产品需要创建它工厂实现产品实现,但耦合度降低,易于扩展 抽象工厂...建造者模式 复杂流程构建 多步构造流程/算法 构造类似种类产品,构造流程相同,表示不同 构造表示分离 1.8.

36530

23种设计模式开闭原则

开闭原则(Open Closed Principle) 基本介绍: 开闭原则是编程中最基础、最重要设计原则 一个软件实体 如类,模块函数应该扩展开放(提供方来说)、修改关闭(使用方)。...当软件需求变化时,尽量通过扩展软件实体行为来实现变化,而不是通过修改已有的代码来实现变化 编程中遵循其他原则,以及使用设计模式目的就是遵循开闭原则 代码示例 有这样一个绘图类 /** *...2.缺点是违反设计模式ocp原则,即对扩展开放对修改关闭。即当我们给类增加新功能时候。...(new Rectangle()); graphicEditor.drawSquare(new Square()); } } 可以看出我们要改动非常繁琐 且需要修改已有的代码 违反开闭原则...满足了开闭原则

17510

设计模式六大原则——开放封闭原则OCP

开闭原则主要体现在两个方面:       1、扩展开放,意味着有新需求或变化时,可以对现有代码进行扩展,以适应新情况。    ...2、修改封闭,意味着类一旦设计完成,就可以独立其工作,而不要对类尽任何修改。    怎么使用开闭原则? 实现开放封闭核心思想就是抽象编程,而不对具体编程,因为抽象相对稳定。...对于违反这一原则类,必须通过重构来进行改善。常用于实现设计模式主要有Template Method模式Strategy 模式。...我们分析上述设计就能发现不能把业务封装在一个类里面,违反单一职责原则,而有新需求发生,必须修改现有代码则违反了开放封闭原则。     如何才能实现耦合度灵活性兼得呢?     ...那就是抽象,将业务功能抽象为接口,当业务员依赖于固定抽象时,修改就是封闭,而通过继承多态继承,从抽象体中扩展出新实现,就是扩展开放。

1.1K41

设计模式高级概念原则

在软件工程中,设计模式是一套被广泛认可解决特定问题方法论。它们不仅仅是代码模板,更是软件设计最佳实践。理解这些高级概念原则对于成为一名优秀软件架构师至关重要。...高级概念 封装(Encapsulation):封装是面向对象编程基石,它指隐藏对象内部状态行为,只暴露有限接口供外部访问。...多态(Polymorphism):多态允许对象以多种形式展现,增强了代码灵活性可扩展性。 抽象(Abstraction):抽象是简化复杂现实手段,通过提取共同属性行为定义通用模型。...设计原则 SOLID 原则: 单一职责原则(SRP):一个类应该只有一个引起变化原因。 开闭原则OCP):软件实体应当扩展开放,修改关闭。...KISS(Keep It Simple, Stupid):尽可能保持简单,避免不必要复杂性。 总结 掌握这些高级概念原则对于软件开发质量维护性有着不可估量影响。

11120

【Go实现】实践GoF23种设计模式:SOLID原则

学习设计模式最高境界是吃透它们本质思想,可以做到即使已经忘掉某个设计模式名称结构,也能在解决特定问题时信手拈来。设计模式背后本质思想,就是我们熟知SOLID原则。...本文首先会介绍本系列文章中用到示例代码demo整体结构,然后开始逐一介绍SOLID原则,也即单一职责原则开闭原则、里氏替换原则、接口隔离原则依赖倒置原则。...OCP开闭原则 开闭原则(The Open-Close Principle,OCP)中,“开”指的是扩展开放,“闭”指的是修改封闭,它完整解释为: A software artifact should...长方形正方形例子详细介绍,请参考【Java实现】实践GoF23种设计模式:SOLID原则“LSP:里氏替换原则”一节 出现违反LSP设计,主要原因还是我们孤立地进行模型设计,没有从客户端程序角度来审视该设计是否正确...(2)抽象细节 在前文“OCP开闭原则”一节中,我们可以知道,抽象就是众多细节中共同点,抽象就是不断忽略细节出来

38150

实践GoF23种设计模式:SOLID原则

学习设计模式最高境界是吃透它们本质思想,可以做到即使已经忘掉某个设计模式名称结构,也能在解决特定问题时信手拈来。设计模式背后本质思想,就是我们熟知SOLID原则。...本文首先会介绍本系列文章中用到示例代码demo整体结构,然后开始逐一介绍SOLID原则,也即单一职责原则开闭原则、里氏替换原则、接口隔离原则依赖倒置原则。...OCP开闭原则 开闭原则(The Open-Close Principle,OCP)中,“开”指的是扩展开放,“闭”指的是修改封闭,它完整解释为: A software artifact should...(2)抽象细节 在前文“OCP开闭原则”一节中,我们可以知道,抽象就是众多细节中共同点,抽象就是不断忽略细节出来。...,能够用、不滥用设计模式

97840

SOLID之OCP

开闭原则 OCP Open-Closed Principle 设计良好计算机软件应该易于扩展,同时抗拒修改 换句话说,一个良好计算机系统应该在不需要修改前提下就可以轻易被扩展 遵循开闭原则设计模块具有两个特征...如果原始需求小小延伸就需要对原有的软件系统进行大幅修改,那么这个系统架构设计显示是失败 一个好软件架构设计师会努力将旧代码修改需求量降至最小,甚至为0 这原则看着很矛盾,需要扩展,但却又不要修改...如果client想使用另一个server对象,那么需要修改client中使用server地方 显然这样违反OCP ?...正确做法是,开发人员应该仅仅对程序中呈现出频繁变化那些部分进行抽象,拒绝不成熟抽象抽象本身一样重要 ---- Common Closure Principle(CCP)共同封闭原则 CCP延伸了开闭原则...CCP还是解决分布式单体可怕模式法宝 在现流行微服务架构中,按业务能力子域以及SRPCCP进行分解是将应用程序分解为服务好方法

45130

系统架构设计原则模式

1 分层架构 分层架构是最常见架构,也被称为n层架构。多年以来,许多企业公司都在他们项目中使用这种架构,它已经几乎成为事实标准,因此被大多数架构师、开发者软件设计者所熟知。...分层架构中层次组件是水平方向分层,每层扮演应用程序中特定角色。根据需求和软件复杂度,我们可以设计N层,但大多数应用程序使用3-4层。...对于某些功能,如果我们从表现层直接访问数据层,那么数据层后续任何变动都将影响到业务层表现层。 ? 分层架构中一个重要概念就是分层开闭原则。如果某层是关闭,那么每个请求都要经过着一层。...相反,如果该层是开放,那么请求可以绕过这一层,直接到下一层。 分层隔离有利于降低整个应用程序复杂度。某些功能并不需要经过每一层,这时我们需要根据开闭原则来简化实现。...跨服务组件代码冗余是完全正常。开发微服务时,为了受益于独立部署单元,以及更加容易部署,我们可以违反DRY原则。其中挑战来自服务组件之间契约,以及服务组件可用性。

1.1K70

设计模式六大原则

2019年2月26日19:41:21 设计模式六大原则 为什么会有六大原则 有言曰,“无规矩不成方圆”,有“规”才能画“圆”,那设计模式要遵循六大原则要画一个什么“圆”呢?...因为设计模式是面向对象实践出来经验,所以这六大原则既是面向对象六大原则,也是设计模式六大原则。...开闭原则(Open Closed Principle, OCP) 定义:软件实体,如:类、模块与函数,对于扩展开放,修改关闭(Software entities like classes, modules...从简单工厂模式工厂方法模式,完美诠释了开闭原则应用场景。有兴趣可以查看本人所写《简单工厂模式工厂方法模式》。...不用修改工厂类,增加运算就增加抽象工厂实现类,符合开闭原则

24320

Java开发人员SOLID设计原则简介

当你是软件工程新手时,S.O.L.I.D.原则设计模式是不容易理解或习惯。我们都有问题,很难掌握SOLID+DP思想,更难以正确实施。事实上,如何实现设计模式需要时间大量实践。   ...我可以说实话,关于SOLID设计模式以及TDD等其他领域,从本质上讲,它们很难教。以正确方式把这些知识信息传授给年轻人是非常困难。   ...开闭原则规定:   “…软件实体,如模块、类、函数等,应为扩展而打开,但为修改而关闭。”   术语“开放式扩展”意味着我们可以在代码中扩展添加额外案例/功能,而不改变或影响我们现有的实现。   ...先试试OCP简单违反操作:   public class VehicleValueCalculator {   // lets assume a simple method to calculate...其中有些是采用开闭原则,通过合同模式进行设计。   还有很多其他解决LSP冲突方法,但是我不打算在这里解释,因为这超出了本文范围。   I代表ISP(接口隔离原则)。

21530

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

文章目录 前言 一、开放闭合原则(Open-Closed Principle or OCP) 二、使用步骤 示例 总结 前言 常用面向对象设计原则有七个,这七大设计原则都是以可维护性可复用性为基础...,这些原则并不是孤立存在,它们相互依赖相互补充,遵循这些设计原则可以有效地提高系统复用性,同时提高系统可维护性。...提示:以下是本篇文章正文内容,下面案例可供参考 一、开放闭合原则(Open-Closed Principle or OCP) 开放闭合原则又叫开闭原则,即软件实体应当扩展开放,修改封闭。...开闭原则就是指软件实体应当尽量保证在不修改原有代码情况下,软件进行扩展。开闭原则是面向对象设计基石。...接口作为一种契约,应当是一种稳定存在,不允许轻易修改,否则将明显违反开闭原则

16720

深入理解DIP:依赖倒置原则

solid之isp:接口隔离原则scp告诉我们应该保证改变只能有一个来源:自己负责功能发生改变;ocp告诉我们开闭原则扩展开放对修改关闭提出了一个更严格设计:程序不修改,新增功能就是添加新代码而不是在旧代码里面修改...所有的设计原则都有个共性就是 要分离关注点,scp,ocpisp都是分离关注点这个原则设计类,方法,接口时核心思想。...类违反了这个原则就会导致类会频繁发生改变;方法违反了这个原则,接口违反了这个原则就会导致自己接口变得很臃肿抽取共通逻辑solid设计原则之 dip:依赖倒置原则定义:高层模块不应该依赖于底层模块,二者应该依赖于抽象...二是不符合scp,开闭原则。因为底层模块实现很容易发生变动修改;高层如果依赖了底层具体类,也就同样需要进行修改,而scp是修改关闭。...组织这些具体类给到高层模块是 di容器做事情,正是因为遵循了dip设计原则,才有将类注入需求,才会出现di容器,ioc容器。

14210
领券