文档章节

六大原则之选择

我是菜鸟我骄傲
 我是菜鸟我骄傲
发布于 2016/03/13 08:41
字数 720
阅读 22
收藏 0

在编程中,如果六大原则,你只能选一个遵守,你会选择选哪个呢?

      我会选单一职责。单一职责是指:对一个方法,一个类或一个模块来说只承担一个职责。为什么呢?因为单一职责可以确保代码简洁易懂,提高可复用性,在我心里单一职责是最普世的一个职责。如果一个类,方法,或模块内容混入多项职责想而知你的代码会有多么的混乱。而你的代码大部分时间是给其他同事维护的。一段混乱的代码会给同事带了多少痛苦。所以单一职责是确保代码简洁易懂的一个有效的方法。

   如果可以再选一个,我会选开闭原则。开闭原则是指对扩展开放,对修改封闭。其实,在使用开闭原则的时候也就不得不使用另一种原则——依赖倒置原则(指高层模块依赖接口,而不依赖具体实现)。开闭原则的主要目的是在不破坏原有代码的情况下扩展新的功能。这样就会在扩展代码的时候而不会造成新的bug。

  还剩下里氏替换原则,接口隔离原则和迪米特法则这三大原则。如果再从这三个原则中选择一个,我会选择遵守接口隔离原则(代码实现不应该依赖不需要的接口),遵守这个原则的主要目的是避免误会,如果类A实现了接口I,但是不需要接口I中的MI方法,就会导致在使用类A的时候,以为类A实现了MI方法,从而引起误会,出现BUG。其次是简化代码,避免不必要的实现,从而减少BUG量。出现这种问题,是因为接口I承担了不必要的职责,可以考虑拆分接口I。

     接下来我会遵守迪米特法则,迪米特法则是指:类与类之间的关系尽可能的少。这个原则的主要目的是简化代码的复杂度。从而降低bug率,提高可读性。

   剩下的最后一个原则是里氏替换原则(用子类替换父类的实现时,程序还可以跟使用父类实现时一样的运行)。这个原则的目的是避免子类重写父类的方法。对于这个原则我只能做到尽量不重写。至于重写了会这么样?我也只能说会增加Bug率。

 那么,在我眼中的六大原则的重要度排名就是,单一职责,开闭原则,接口隔离原则,迪米特法则,里氏替换原则。


© 著作权归作者所有

共有 人打赏支持
我是菜鸟我骄傲
粉丝 12
博文 217
码字总数 137995
作品 0
西安
架构师
设计模式之六大原则与抽象

抽象 抽象是为了某种目的,对一个概念或一种现象包含的信息进行过滤,移除不相关的信息,只保留最终与目的相关的信息。比如:"一个纸杯",我们可以过滤掉质料相关的信息,得到一个更一般且通...

lazy_boy_coder
01/10
0
0
day18(面向对象基础,设计模式)

多继承补充 继承具有传递性,可以借助 类名.mro观察继承关系 设计模式 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在...

冰封心动
2017/11/15
0
0
设计模式的原则(开闭原则)

设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括...

pmos
2016/06/02
28
0
Android 进阶之路(我的博客文章目录)

原文地址:http://blog.csdn.net/u011240877 为了方便读者阅读以及自己回顾,总结写过的文章和一些想要写的文章目录如下: 1.Java Java 解惑:Comparable 和 Comparator 的区别 Java 解惑:R...

u011240877
2017/04/01
0
0
一个程序员的读书笔记:程序设计的反思

刚开始编程的时候是在高中,那个时候计算机课上老师教的是pascal。一种典型的面相过程的语言。那个时候懵懵懂懂的认为:程序还是一个蛮神奇的东西,敲几个英文字符进去,就能够有反馈。即使这...

绝影jy
2014/05/03
0
4

没有更多内容

加载失败,请刷新页面

加载更多

大数据学习脑图以及入门教程!

近些年,大数据的火热可谓是技术人都知道啊,很多人呢,也想学习大数据相关,所以,这里分享几个大数据脑图,希望可以让你清楚明白从哪里入门大数据,知道该学习以及掌握哪些知识点; 大数据...

董黎明
20分钟前
0
0
聊聊redis的监控工具

序 本文主要研究一下redis的监控工具 redis-stat redis-stat是一个比较有名的redis指标可视化的监控工具,采用ruby开发,基于redis的info命令来统计,不影响redis性能。 docker运行 docker r...

go4it
22分钟前
0
0
TypeScript基础入门之高级类型的索引类型(Index types)

转发 TypeScript基础入门之高级类型的索引类型(Index types) 高级类型 索引类型(Index types) 使用索引类型,编译器就能够检查使用了动态属性名的代码。 例如,一个常见的JavaScript模式是从...

durban
40分钟前
0
0
利用碎片化时间Get Linux系统

起初,我做着一份与IT毫无关系的工作,每月领着可怜的工资,一直想改变现状,但无从下手,也就是大家熟知的迷茫。我相信,每一个人都会或多或少的经历过迷茫,迷茫每一个选择,迷茫工作或者生...

Linux就该这么学
今天
1
0
图像显示深入学习一:Activity启动过程

一个月左右写了图像显示深入学习之文章开篇文章表明了自己近期的计划,前半年重新学习了opengl es,c++以及Linux的一些知识,觉得是时候开始看图像这一块的源码了,边看边补缺补漏吧。 作为该...

JerryLin123
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部