java面向对象设计原则之开闭原则示例解析

 更新时间:2021年10月14日 10:43:53   作者:guoyp2126  
这篇文章主要介绍了java面向对象设计原则之开闭原则的示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

概念

唯一不变的是不断的变化,在软件开发中应该对需求的变化持开放态度,我们要做的就是如何将这种变化对我们现有的成果带来最小的冲击。开闭原则直接面对面向对象程序的目标扩展性和可维护性,要求对扩展开放,对修改关闭;即在不修改原有代码的情况下改变模块的行为。该原则是面向对象程序设计的总原则,也是度量程序设计的好与坏的唯一标准

实现

开闭原则的实现策略主要在面向对象的封装性和多态性的基础上,利用面向对象的其他原则完成的。

1.使用多态机制解决问题。

如:远程监控系统使用数据传输使用427版本的协议,一年以后对427版本的协议进行了修正。设计时应该考虑的数据传输协议的可变性,抽象出具有报文解译、编制、校验等所有版本协议使用的通用方法,调用方针对接口进行编程即可,如上述示例设计类图如下:

在这里插入图片描述

调用方依赖于报文接口,报文接口是稳定的,而不针对具体的427协议或427修正协议。利用接口多态技术,实现了开闭原则。除使用接口实现多态外,还可以使用继承机制重置实现多态来完成,如:某一实现过程包括获取数据、数据处理、数据存储,其中获取数据和存取数据不变,数据处理过程发生变化,则可以在子类中使用重置机制将数据处理方法进行重写。使用多态技术实现的方式,均不修改原有代码,只是增加一份新的实现类,完成了开闭原则。

2.降低耦合度, 将变化的代码降到最低

如:系统界面上按钮控件为方形按钮,现在领导要求把所有的按钮换成圆角按钮,如何办?
使用迪米特法则,在使用按钮控件时,给其包外围一层,增加一个按钮包装类,使得界面与按钮控件脱耦,修改时只需修改包装器类即可。其类图如下:

在这里插入图片描述

3. 遵循单一职责原则

职责越单一,封装性越好,“开闭原则”越容易实现。

拓展

1.注意分支语句的使用。分支语句破坏开闭原则,当条件发生变化时,我们不得不修改代码。解决办法依然是使用多态机制,每个分支使用不同实现类,来解决问题。
2. 避免过度设计
百分之百的开闭原则很难达到,但要尽量符合开闭原则。在设计时对于将来可能会发生变化的部分实现面向接口的编程,同时对不可能或极小概率发生变化时的应该避免过度设计而造成的复杂性。

以上就是java面向对象设计原则之开闭原则示例解析的详细内容,更多关于java面向对象设计原则的资料请关注脚本之家其它相关文章!

相关文章

  • java实现简易扑克牌游戏

    java实现简易扑克牌游戏

    这篇文章主要为大家详细介绍了java实现简易扑克牌游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • java设计模式学习之代理模式

    java设计模式学习之代理模式

    这篇文章主要为大家详细介绍了java设计模式学习之代理模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Java中数组的定义与使用详解

    Java中数组的定义与使用详解

    这篇文章主要给大家介绍了关于Java中数组的定义与使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-11-11
  • Java 实战项目之家居购物商城系统详解流程

    Java 实战项目之家居购物商城系统详解流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Java实现一个家居购物商城系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • Mybatis新手教程之简单入门

    Mybatis新手教程之简单入门

    这篇文章主要给大家介绍了关于Mybatis新手教程之简单入门的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-02-02
  • java开发实现订阅到货通知帮我们买到想买的东西

    java开发实现订阅到货通知帮我们买到想买的东西

    这篇文章主要为大家介绍了java开发实现订阅到货通知帮我们买到想买的东西示例demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • java中Date和Timestamp类型的相互转换方式

    java中Date和Timestamp类型的相互转换方式

    这篇文章主要介绍了java中Date和Timestamp类型的相互转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 理解java多线程中ExecutorService使用

    理解java多线程中ExecutorService使用

    这篇文章主要帮助大家理解java多线程中ExcetorServiced的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • SpringBoot--- SpringSecurity进行注销权限控制的配置方法

    SpringBoot--- SpringSecurity进行注销权限控制的配置方法

    这篇文章主要介绍了SpringBoot--- SpringSecurity进行注销,权限控制,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Servlet中/和/*的区别详解

    Servlet中/和/*的区别详解

    本文将分析/和/*的区别这个老生常谈的问题,但是很多时候看完就忘了,关于此问题这一篇文章就够了,它将成为你的永久记忆,感兴趣的可以了解一下
    2021-07-07

最新评论