Java的开发—面向对象的7大原则之开闭原则(一)
开闭原则(Open Close Principle)
一、定义:
软件中的(类、模块、函数等等)应该对于扩展是开放的,对于修改时关闭的。意味着一个实体允许在不改变它的源代码的前提变更它的行为
这里的软件包含一下几个部分:
1.项目中划分的模块
2.类与接口
3.方法
二、作用
使软件具有一定的适应性和灵活性的同时具备稳定性和延续性
1.对软件测试的影响
遵循开闭原则,只需要对扩展的代码进行测试,原有的测试 代码任然能够运行
2.提高代码复用性
粒度越小(功能越单一),越容易被复用。在面向对象的程序设计中,根据原子和抽象编程可以提高代码的复用性
3.提高软件的可维护性
遵循开闭原则的程序:稳定性高和延续性强,易于扩展和维护
三、开闭原则的实现方法
通过“抽象约束,封装变化”来实现开闭原则,即通过接口和抽象类为软件定义一个相对稳定的抽象层,而将相同的可变因素封装到相同的具体实现类中。
软件中稳定的用抽象或接口约束,易变的用实现类扩展
示例
定义成年人的行为:
固定的:吃饭 上班 睡觉
易变的:玩游戏 开车 运动
public interface Person {
public void eat();
public void sleep();
public void work();
}
/**
* 公交司机
*/
public class BusDriver implements Person {
private String name;
public BusDriver(String name) {
this.name = name;
}
@Override
public void eat() {
System.out.println(name + "在吃饭");
}
@Override
public void sleep() {
System.out.println(name + "在睡觉");
}
@Override
public void work() {
System.out.println(name + "在工作");
}
/**
* 开公交车:公交司机独有的
*/
public void drive(){
System.out.println(name + "在开公交车");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
* 售票员
*/
public class TicketSeller extends Person {
public TicketSeller(String name) {
super(name);
}
@Override
protected void eat() {
System.out.println(getName() + "在吃饭");
}
@Override
protected void sleep() {
System.out.println(getName() + "在睡觉");
}
@Override
protected void work() {
System.out.println(getName() + "在工作");
}
/**
* 售票员独有的
*/
public void sellTicket(){
System.out.println(getName() + "在买票");
}
}
测试:
public static void main(String[] args) {
BusDriver busDriver = new BusDriver("老王");
busDriver.eat();
busDriver.work();
busDriver.drive();
busDriver.sleep();
TicketSeller sellTicket = new TicketSeller("李小姐");
sellTicket.eat();
sellTicket.work();
sellTicket.sellTicket();
sellTicket.sleep();
}
测试结果:

结论:下次我增加了飞行员 等等其他类型的人,我直接增加子类就好,在子类中增加自己的方法,从而不用修改原有代码
这里面是个人理解,有书写错误的或者大家有更好更容易理解的可以提出来
Java的开发—面向对象的7大原则之开闭原则(一)的更多相关文章
- Java设计模式(1:软件架构设计七大原则及开闭原则详解)
前言 在日常工作中,我们使用Java语言进行业务开发的时候,或多或少的都会涉及到设计模式,而运用好设计模式对于我而言,又是一个比较大的难题.为了解决.克服这个难题,笔主特别开了这个博客来记录自己学习的 ...
- 7.10 其他面向对象设计原则1: 开-闭原则OCP
其他面向对象设计原则1: 开-闭原则OCP Open-Closed Principle (OCP)5.1 设计变坏的前兆 Signs of Rotting Design 僵硬性 Rigidit ...
- 开放-封闭原则(OCP)开-闭原则 和 依赖倒转原则,单一职责原则
单一职责原则 1.单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因 2.如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或抑制这个类完成其他职责的能力. ...
- 设计原则:开闭原则(OCP)
1.什么是开闭原则 开闭原则的英文是Open Closed Principle,缩写就是OCP.其定义如下: 软件实体(模块.类.方法等)应该"对扩展开放.对修改关闭". 从定义上 ...
- 设计原则:开-闭原则(Open-Closed Principle, OCP)
开-闭原则就是软件实体应当对扩展开放,对修改关闭.(Software entities should be open for extension,but closed for modification ...
- js 的七大原则--单一原则、开闭原则、替换原则(一)
一.前言: js 的七大设计原则: 1.单一原则 2.开闭原则 3.里氏替换原则 4.依赖倒转原则 5.接口隔离原则 6.合成复用原则 7.迪米尔法则 二.单一原则 1.定义:单一原则就是一个对象或者 ...
- 最简单直接地理解Java软件设计原则之开闭原则
写在前面 本文属于Java软件设计原则系列文章的其中一篇,后续会继续分享其他的原则.想以最简单的方式,最直观的demo去彻底理解设计原则.文章属于个人整理.也欢迎大家提出不同的想法. 首先是一些理论性 ...
- 深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP
前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第2篇,开闭原则OCP(The Open/Closed Principle ). 开闭原则的描述是: Software ...
- java设计原则---开闭原则
开闭原则:指的是一个软件实体应对对扩展开发,对修改关闭(Software entities should be open for extension, but closed for modificat ...
随机推荐
- 3种基础的 REST 安全机制
安全是 RESTful web service 的基石,我们主要讨论以下3种主要的方法: Basic authentication Oauth 2.0 Oauth 2.0 + JWT 1. Basic ...
- GoldenGate DB11gr2配置手册
GoldenGate DB11gr2配置手册 源端数据库配置 1.1源端数据库打开Archive Log: SQL>shutdown immediate; SQL>startup moun ...
- 【红外DDE算法】数字细节增强算法的缘由与效果(我对FLIR文档详解)
[红外DDE算法]数字细节增强算法的缘由与效果(我对FLIR文档详解) 1. 为什么红外系统中图像大多是14bit(甚至更高)?一个红外系统的性能经常以其探测的范围来区别,以及其对最小等效温差指标.首 ...
- cocos2dx,Layer锚点与scale缩放
最近写代码需要用到缩放,而且是Layer的,但是发现怎么设置位置都是错误,于是决定研究下. 首先,基础代码,代码上不错特殊处理,没有锚点设置和缩放 class TestLayer : public L ...
- 用postman导出excel文件
原文地址:https://jingyan.baidu.com/article/915fc414559b4351394b2084.html 现在的web和移动开发,常常会调用服务器提供restful接口 ...
- Frameworks.Entity.Core 5 EntityValidation
Project.Core\Frameworks.Entity.Core\EntityValidation\ EntityValidation 1 数值验证DigitAttribute.cs Digi ...
- 《前端之路》--- 重温 Koa2
目录 一.简单介绍 二. 路由 三.请求数据 四. 静态资源加载 五. 静态资源加载 六. koa2加载模板引擎 七. koa2 中简单使用 mysql 数据库 八. koa2 中使用单元检测 九. ...
- AI领域有什么职业?怎样才能在AI领域找到工作?
AI领域是一个很吃香的行业,在这个行业中,很多人都是高薪的,而且有些学生为了以后能够接触到这个行业,都在大学的时候,学习这个专业,那么大家知道AI领域有什么职业吗?下面我们就来给大家讲解一下. 1.算 ...
- re模块的使用
re模块下的函数 compile(pattern):创建模式对象 import re pat = re.compile('D') m = pat.search('CBA') #等价于re.search ...
- 痞子衡嵌入式:嵌入式里堆栈原理及其纯C实现
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式里堆栈原理及其纯C实现. 今天给大家分享的这篇还是2016年之前痞子衡写的技术文档,花了点时间重新编排了一下格式.栈这种结构在嵌入式 ...