浅谈面向对象的单一职责原则与开放封闭原则
来源:互联网 发布:大数据算法有哪些 编辑:程序博客网 时间:2024/04/29 23:55
单一职责原则的核心思想一个类,最好只做一件事,只有一个引起它的变化。通常意义下的单一职责,就是指只有一种单一功能(该功能不会再去考虑分割),不要为类实现过多的功能点,以保证实体只有一个引起它变化的原因,这也就是开发者宁愿写更多的代码去实现多层次继承关系,来保证每个类只完成它的特定职责。当一个类职责过多时,可能引起它变化的原因就越多,这将导致职责依赖,相互之间产生影响。
当一个类有A,B两个职责时,在创建使用该类的对象时就要考虑三种情况。1.实现A职责不实现B职责,2.实现B职责不实现A职责,3.同时实现A,B职责。(不考虑两个职责都不实现的情况,如果什么职责都没有,你创建这个类就没意义了)。同理,当有三个职责时就有7种情况要考虑,当有n个职责时就要考虑2^n-1种情况。这会造成代码的逻辑关系处理难度呈指数型增长,从而大大损伤其内聚性并增加了耦合度,那么当后续开发者在继承这个类的基础上开发新功能时,难度将会非常大。而我们之所以能在功能如此复杂的Android原生应用上进行再次开发的原因,也就是因为它极大程度上贯彻了该项原则。
再来谈谈开放封闭原则,其核心思想是软件实体应该是可扩展的,而不可修改的,也就是对扩展开放,对修改封闭。该原则实施的前提是,已实现功能片段的代码已经很完善了,不需要修改了,也就是说该原则是在有增加新功能时才去考虑的。面向对象编程中的继承,接口,抽象类等的设计都是为了便于该原则的实行。
开放封闭原则主要体现在两个方面:
1、对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。
2、对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对其进行任何尝试的修改。也就是说,当你觉得你增加的新功能与已有代码产生冲突时,要以扩展的形式去解决冲突,而不是修改已有的代码,使两种功能混在一起。
举例:一种较简单的扩展方式就是,增加一个控制新功能代码片段的boolean类型变量,默认为false,即不执行新加的功能片段(这样可以排除新功能对已有功能的影响),然后在你确定要执行该功能的对象里面找个合理的时间点set为true即可。
该两项原则是面向对象的核心,面向对象的其它原则实质上也是在更细节的阐述并体现这两项原则。这些原则并不是强制不可违背,但遵循这些原则才能提高代码的可读性,可复用性以及可扩展性。
- 浅谈面向对象的单一职责原则与开放封闭原则
- 面向对象设计原则——单一职责原则,开放-封闭原则
- 读书笔记--单一职责原则、开放-封闭原则
- 1、单一职责原则(SRP),2、开放-封闭原则(OCP)
- 大话设计模式-单一职责原则 /封闭开放原则
- 【设计模式】单一职责原则 & 开放封闭原则
- 设计模式之单一职责原则&开放-封闭原则
- 面向对象设计原则-开放封闭原则
- 面向对象设计原则--开放封闭原则
- 面向对象设计原则-单一职责原则
- 面向对象设计原则---单一职责原则
- 面向对象六大原则----单一职责原则
- 面向对象原则--单一职责原则
- 面向对象OOP的5原则:开放封闭原则--OCP
- 面向对象的原则之开放-封闭原则
- 面向对象的设计原则:开放-封闭原则
- 面向对象OOP的5原则:单一职责原则--SRP
- 面向对象的设计原则二-单一职责原则
- mybatis 总结
- mybatis: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
- tensorflow tf.stack tf.unstack 实例
- 简历到底要怎么写
- BOM编程与事件编程
- 浅谈面向对象的单一职责原则与开放封闭原则
- 欢迎使用CSDN-markdown编辑器
- 哈弗曼编码的java实现
- android adb shell 修改权限
- 解决Oracle 查询条件带中文 出错问题
- WMI 已安装的应用程序类
- SVM学习笔记
- mysql的事务处理
- 教你如何用Windows远程桌面双向复制粘贴带格式文本