定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
强调的是用抽象构建框架,用实现扩展细节。
优点:提高软件系统的可复用性及可维护性

例如:

创建一个Course接口
获取id方法
获取name方法
获取price方法

创建一个JavaCourse类实现Course接口
设置三个属性
Integer id
String name
Double price
创建一个满参的构造函数
修改重写的三个方法的返回值

创建一个Test测试类
创建一个JavaCourse类,赋予属性
直接输出这个对象的属性

可以在idea编辑器中右键包选择

查看类图关系

比如说现在有一个需求,关于价格有个打8折活动,我们在此基础上在更改接口的话,所有的实现类中的方法都要重写这个方法,如果实现类少的话还可以接受,但是我们的接口是不可以经常变化的,应该是稳定可靠的,否则这个作用也就失去了。
解决方案:我们在写一个JavaDiscountCourse类去继承JavaCourse类,然后去重写父类的getPrice()价格方法,如下图

修改test类 创建的是子类对象(new JavaDiscountCourse)

这样就可以更好的去扩展并且展示出了打折后的价格

但是呢如果需要展示原价格的话又要怎么去做呢?
在子类中定义一个方法getOriginPrice() 去获取原价格

但是我们发现在test中他调用不到定义的获取原价格的方法

虽然定义的是public方法,当时因为我们在test类中使用父类声明的引用,所以他拿不到public方法
所以我们需要将其类型进行强转

这样我们就可以调用定义的获取原价格的方法了

类图如下

总结:开闭原则在这里指的是 对于扩展是开放的,而对修改接口和基类是关闭的
我们变化的都是应用层的子模块,越是底层(基础)的模块进行更改,变化(影响)是越大的,越是高层的模块更改,变化 影响的范围会越小。
简单的理解:比如说我们的Dao层变化了,而这个Dao层被很多service使用,而在上层是controller,那这个影响就非常大,有可能我们为了改一个模块影响到另一个模块,所以说我们在面向对象编程的时候,一定强调开闭原则,其他原则也都是开闭原则的具体形态,提高了复用性和可维护性,因为我们在公司并不是一个人开发,我们要考虑软件的维护成本。

java设计模式之设计原则①开闭原则相关推荐

  1. Java七大设计原则 - 开闭原则

    一. 什么是开闭原则(Open Closed Principle)? 开闭原则(Open Closed Principle,OCP)又称为ocp原则, 由勃兰特·梅耶(Bertrand Meyer)提 ...

  2. 带你认识六种设计原则(开闭原则、里氏代换原则、依赖倒转原则....)

    前言 1. 设计原则 1.1. 开-闭原则 1.2. 里氏代换原则 1.3. 依赖倒转原则 1.4. 接口隔离原则 1.5. 合成/聚合原则 1.6. 迪米特法则 前言 学习设计模式之前先要了解其中的 ...

  3. 六大设计原则--开闭原则

    定义 software entities like classes, modules and functions should be open for extension but closed for ...

  4. 面向对象软件设计的“开—闭”原则

    1.什么是开闭原则         "开-闭"原则是指软件实体应当对扩展性开放,对修改关闭.即软件实体应该在不修改的前提下扩展,这个原则实际上为软件设计指明了目标.我们知道软件设计 ...

  5. 设计模式之王者原则 开闭原则

    设计模式之王者原则  开闭原则 为什么说 它--开闭原则是王者原则呢? 因为所有原则都是围绕它来实现的,怎么说呢,为什么会有这么多原则呢,都是为了完成它,只要实现它你的代码就不会有什么大的问题 一.定 ...

  6. 六大设计模式原则-开闭原则

    一.开闭原则定义 开闭原则是面向对象的可复用设计的第一块基石,是最重要的面向对象设计原则.定义如下: 开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修 ...

  7. 设计模式6大原则-开闭原则

    设计模式6大原则-开闭原则 定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 开闭原则理念就是当需求改变时,希望在不改变原有代码的前提下,通过扩展模块.函数来满足新需求. 开闭原则是其他 ...

  8. 一周技术学习笔记(第67期)-CPU的设计跟开闭原则有关系吗

    你能想到CPU的设计是开闭原则的设计吗 说CPU的设计很符合软件设计的开闭原则,估计一般的同学肯定不会这样意识到.其实我也一样不太可能把它们能够想在一起,并将它们关联起来. 可确实就这样发生了.实际上 ...

  9. Java设计模式之设计的6大原则(开闭原则,里氏代换原则,依赖倒转原则,接口隔离原则,最少知道原则,合成复用原则)

    1. 开闭原则 核心思想:一个对象对外扩展开发,对修改关闭 意思就是:对类的改动是通过增加代码进行的,而不是修改现有的代码. 也就是说软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证 ...

最新文章

  1. (char*)x C语言中的和*的详解
  2. 修订版 | 目标检测:速度和准确性比较(Faster R-CNN,R-FCN,SSD,FPN,RetinaNet和YOLOv3)...
  3. ajax 分页 评论刷新,评论:js无刷新分页(原创)
  4. airpods删除别人的配对_怎么不让别人连我的airpods
  5. Java Scanner nextLine()方法与示例
  6. iOS客户端流量统计
  7. mongo在哪创建管理员_MongoDB数据库创建管理员账户和数据库管理账户
  8. Loadrunner如何监控Linux系统资源
  9. [HttpPost] vs [AcceptVerbs(HttpVerbs.Post)]
  10. UVA 1590 IP Networks
  11. 基于BP神经网络识别手写字体MINST字符集
  12. 2019春季总结报告
  13. 运动轨迹 php,两种JS实现小球抛物线轨迹运动的方法
  14. 清除tomcat缓存HTML,清除Tomcat缓存
  15. 360极速浏览器无法打开qq邮箱网址
  16. 移动端兼容如: 背景图片、页面放大、卡顿、闪退、内阴影
  17. 如何使用Android Studio将网站转换为Android App
  18. 【编程实践】什么是计算机编程?定义软件开发。What is Computer Programming? Defining Software Development.
  19. R语言笔记7:functions——编写函数所需的基础知识
  20. 中国省市区三级联动实例(AJAX实现)

热门文章

  1. Presenting the Permanent Generation
  2. JavaWeb学习总结(十七):JSP中的九个内置对象
  3. 90 % 的 Python 开发者不知道的描述符应用
  4. 解析JavaScript中的字符串类型与字符编码支持
  5. 系统目录结构,文件类型
  6. 踩坑之旅:springboot+vue+webpack项目实战(一)
  7. SNAT,是源地址转换,其作用是将ip数据包的源地址转换成另外一个地址
  8. 新的博客 bincoding.github.io
  9. 第七节 VMware View 6.0 菜鸟入门 Composer 安装和部署
  10. C#版二维码生成器附皮肤下载