java面向对象设计原则之开闭原则示例解析
概念
唯一不变的是不断的变化,在软件开发中应该对需求的变化持开放态度,我们要做的就是如何将这种变化对我们现有的成果带来最小的冲击。开闭原则直接面对面向对象程序的目标扩展性和可维护性,要求对扩展开放,对修改关闭;即在不修改原有代码的情况下改变模块的行为。该原则是面向对象程序设计的总原则,也是度量程序设计的好与坏的唯一标准
实现
开闭原则的实现策略主要在面向对象的封装性和多态性的基础上,利用面向对象的其他原则完成的。
1.使用多态机制解决问题。
如:远程监控系统使用数据传输使用427版本的协议,一年以后对427版本的协议进行了修正。设计时应该考虑的数据传输协议的可变性,抽象出具有报文解译、编制、校验等所有版本协议使用的通用方法,调用方针对接口进行编程即可,如上述示例设计类图如下:
调用方依赖于报文接口,报文接口是稳定的,而不针对具体的427协议或427修正协议。利用接口多态技术,实现了开闭原则。除使用接口实现多态外,还可以使用继承机制重置实现多态来完成,如:某一实现过程包括获取数据、数据处理、数据存储,其中获取数据和存取数据不变,数据处理过程发生变化,则可以在子类中使用重置机制将数据处理方法进行重写。使用多态技术实现的方式,均不修改原有代码,只是增加一份新的实现类,完成了开闭原则。
2.降低耦合度, 将变化的代码降到最低
如:系统界面上按钮控件为方形按钮,现在领导要求把所有的按钮换成圆角按钮,如何办?
使用迪米特法则,在使用按钮控件时,给其包外围一层,增加一个按钮包装类,使得界面与按钮控件脱耦,修改时只需修改包装器类即可。其类图如下:
3. 遵循单一职责原则
职责越单一,封装性越好,“开闭原则”越容易实现。
拓展
1.注意分支语句的使用。分支语句破坏开闭原则,当条件发生变化时,我们不得不修改代码。解决办法依然是使用多态机制,每个分支使用不同实现类,来解决问题。
2. 避免过度设计
百分之百的开闭原则很难达到,但要尽量符合开闭原则。在设计时对于将来可能会发生变化的部分实现面向接口的编程,同时对不可能或极小概率发生变化时的应该避免过度设计而造成的复杂性。
以上就是java面向对象设计原则之开闭原则示例解析的详细内容,更多关于java面向对象设计原则的资料请关注我们其它相关文章!
相关推荐
-
java面向对象设计原则之单一职责与依赖倒置原则详解
目录 单一职责概念 实现 拓展 依赖倒置原则概念 示例 拓展 单一职责概念 不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,否则就应该把类拆分.交杂不清的职责将使得代码牵一发而动全身,导致代码混涩难懂,不易修改.难以扩展和复用.如:以前开发C/S程序中的胖客户端程序,就是将人机交互逻辑.业务加工处理逻辑和数据库操作逻辑混合在一起. 实现 单一职责原则是进行类的划分和封装的基本原则,进行类的具体抽象.尽量做到,类的功能单一和清晰化. 1.根据机能划分,使用封装来创建对象之间的分
-
java面向对象设计原则之合成复用原则示例详解
目录 概念 示例 拓展 概念 尽量使用合成/聚合,而不是使用继承实现复用.所谓的合成/聚合是指一个对象里持有另外一个类的对象,通过调用这些对象的方法得到复用已有功能的目的.如:报文解译程序中,按照继承复用可以设计为: 子类调用父类的方法即可完成水文报文解译.气象解译中通用方法:子类中一定包含了父类的方法,这个叫继承复用. 按照合成/聚合原则设计为: 水文协议和气象协议中,持有编码和位制转换对象,通过调用对象方法即可完成复用. 示例 数据库连接的复用:首先看通过集成关系复用数据连接代码如下 pub
-
实例讲解Java设计模式编程中的OCP开闭原则
定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 问题由来:在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试. 解决方案:当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化. 开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统.开闭原则可能是设计模式六项原则中定义最模糊的一个了,它
-
java面向对象设计原则之里氏替换原则示例详解
目录 概念 实现 拓展 概念 里氏替换原则是任何基类出现的地方,子类一定可以替换它:是建立在基于抽象.多态.继承的基础复用的基石,该原则能够保证系统具有良好的拓展性,同时实现基于多态的抽象机制,能够减少代码冗余. 实现 里氏替换原则要求我们在编码时使用基类或接口去定义对象变量,使用时可以由具体实现对象进行赋值,实现变化的多样性,完成代码对修改的封闭,扩展的开放.如:商城商品结算中,定义结算接口Istrategy,该接口有三个具体实现类,分别为PromotionalStrategy (满减活动,两
-
java面向对象设计原则之接口隔离原则示例详解
目录 概念 实现 拓展 概念 小接口原则,即每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分.如下图所示定义了一个接口,包含了5个方法,实现类A用到了3个方法.实现类B用到了3个方法,类图如下: 类A没有方法4.方法5,却要实现它:类B没有方法2.方法3,但还是要实现这两个方法,不符合接口隔离原则.改造为将其拆分为三个接口,实现方式改为下图所示,符合接口隔离原则: 实现 面向对象机制中一个类可以实现多个接口,通过多重继承分离,通过接口多继承(实现)来实现客户的需求,代码更加清
-
解析Java编程中设计模式的开闭原则的运用
开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的.灵活的系统. 定义: 一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. Softeware entities like classes,modules and functions should be open for extension but closed for modifications. 开闭原则的含义是说一个软件实体应该通过扩展来实现变化,而不是通过修改已有代码
-
java面向对象设计原则之开闭原则示例解析
概念 唯一不变的是不断的变化,在软件开发中应该对需求的变化持开放态度,我们要做的就是如何将这种变化对我们现有的成果带来最小的冲击.开闭原则直接面对面向对象程序的目标扩展性和可维护性,要求对扩展开放,对修改关闭:即在不修改原有代码的情况下改变模块的行为.该原则是面向对象程序设计的总原则,也是度量程序设计的好与坏的唯一标准 实现 开闭原则的实现策略主要在面向对象的封装性和多态性的基础上,利用面向对象的其他原则完成的. 1.使用多态机制解决问题. 如:远程监控系统使用数据传输使用427版本的协议,一年
-
C#面向对象设计原则之开闭原则
开闭原则(OCP) 定义:对扩展开发,对修改关闭.好处: 适应性和灵活性. 稳定性和延续性. 可复用性与可维护性. 解释说明:开闭原则指的是两方面:对功能扩展开发,对修改进行关闭:有时当用户要求或需求发生变化时,我们不得不打开原来的代码进行修改,进行功能的扩展或增加,这种设计如果应用到我们以后的项目开发中会导致严重的问题,这样容易导致意外的错误.好的程序,应该保证在我们进行程序扩展时,不会更改以前的代码.如何才能保证这样的效果呢?我们在定义一个类的功能时:最好先定义他的抽象类或接口,这样在功能扩
-
Java设计模式七大原则之开闭原则详解
目录 定义 案例 需求 方案一 执行结果 方案二 执行结果 对比分析 总结 定义 开闭原则( Open Close Principle ),又称为OCP原则,即一个软件实体如类,模块和函数应该对扩展开放,对修改关闭.其中,对扩展开放是针对提供方来说的,对修改关闭是针对调用方来说的. 案例 需求 购买东西的时候,根据支付类型的不同使用不同的方式进行支付,当类型为1时,使用微信支付:当类型为2时,使用支付宝支付 方案一 定义支付类型 /** * 支付类型 * @author:liyajie * @c
-
java设计模式七大原则之开闭原则示例详解
目录 1.什么是开闭原则? 2.违反Ocp代码案例 3.遵守Ocp代码案例 1.什么是开闭原则? 开闭原则(Open Closed Principle)是编程中最基础.最重要的设计原则.一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方).用抽象构建框架,用实现扩展细节.当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化.编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则. 2.违反Ocp代码案例 package com.
-
六大设计原则之开闭原则
定义: 一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 问题由来: 在软件的生命周期内,因为变化.升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试. 解决方案: 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化. 开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统. 开闭原则可能是设计模式六项原则中定义最模糊的一个了,它只告诉我们
-
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第2篇,开闭原则OCP(The Open/Closed Principle ). 开闭原则的描述是: Software entities (classes, modules, functions, etc.) should be open for extension but closed for modification. 软件实体(类,模块,方法等等)应当对扩展开放,对修改关闭,即软件实体应当在不修改的前提下扩展.
-
Java设计模式之开闭原则精解
目录 1.什么是开闭原则? 2.违反Ocp代码案例 3.遵守Ocp代码案例 1.什么是开闭原则? 开闭原则(Open Closed Principle)是编程中最基础.最重要的设计原则. 一个软件实体如类,模块和函数应该对扩展开放(对提供方),对修改关闭(对使用方).用抽象构建框架,用实现扩展细节. 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化. 编程中遵循其它原则,以及使用设计模式的目的就是遵循开闭原则. 2.违反Ocp代码案例 package c
-
C#面向对象编程中开闭原则的示例详解
目录 开闭原则 C# 示例 改进 总结 在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解.灵活和可维护.这些原则是由美国软件工程师和讲师罗伯特·C·马丁(Robert Cecil Martin)提出的许多原则的子集,在他2000年的论文<设计原则与设计模式>中首次提出. SOLID 原则包含: S:单一功能原则(single-responsibility principle) O:开闭原则(open-closed principle) L:里氏替换原则(Lis
随机推荐
- 讲解Oracle数据库中的数据字典及相关SQL查询用法
- 在服务器端的XSLT过程中的编码问题
- JavaScript 深层克隆对象详解及实例
- IOS设置QQ小红点消除的方法(一键退朝)
- java emoji表情存储的解决方法
- ASP.NET中MultiView和View选项卡控件的使用方法
- 关于中gridview 字符串截取的方法
- javascript实现别踩白块儿小游戏程序
- Winform OpenFileDialog打开文件对话框
- PHP中对于浮点型的数据需要用不同的方法解决
- Mysql 5.7 忘记root密码或重置密码的详细方法
- jquery动画效果学习笔记(8种效果)
- 基于ES6 Array.of的用法(实例讲解)
- JavaScript让Textarea支持tab按键的方法
- AS3 中的package(包)应用实例代码
- Android面试笔记之常问的Context
- Java 数组声明、创建、初始化详解
- 适用于Java程序员的10道XML面试题 新鲜出炉
- 虚函数被类的构造析构函数和成员函数调用虚函数的执行过程
- Python常用字符串替换函数strip、replace及sub用法示例