文档章节

六大原则之选择

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

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

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

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

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

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

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

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


© 著作权归作者所有

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

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

lazy_boy_coder ⋅ 01/10 ⋅ 0

day18(面向对象基础,设计模式)

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

冰封心动 ⋅ 2017/11/15 ⋅ 0

软件设计原则

了解设计模式的朋友们,想必都听说过“六大设计原则”吧。其实最经典的 23 种设计模式中或多或少地都在使用这些设计原则,也就是说,设计模式是站在设计原则的基础之上的。所以在学习设计模式...

黄勇 ⋅ 2013/09/25 ⋅ 14

Android 进阶之路(我的博客文章目录)

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

u011240877 ⋅ 2017/04/01 ⋅ 0

设计模式的原则(开闭原则)

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

pmos ⋅ 2016/06/02 ⋅ 0

设计模式详解(总纲)

最近一直在学习设计模式相关的知识,还是老规矩,和各位一起学习,一起探讨,本系列所发表所有内容仅代表个人观点。 《简介》 说到设计模式,当初第一次听到时,第一反应就是很深奥,完全理解...

Sheamus ⋅ 2015/01/21 ⋅ 0

一个程序员的读书笔记:程序设计的反思

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

joying华 ⋅ 2014/05/03 ⋅ 4

设计模式六大原则简单总结

设计模式有六大基本的设计原则,现简单总结如下: 原则名称 1 、SRP(Single Responsibility Principle)单一职责。 2、LSP(Listkov Substitution Principle)里氏替换原则。 3、DIP (Dep...

辉兔狼 ⋅ 2013/03/28 ⋅ 0

一个程序员的读书笔记--关于程序设计的反思

一个程序员的读书笔记--关于程序设计的反思 刚开始编程的时候是在高中,那个时候计算机课上老师教的是pascal。一种典型的面相过程的语言。那个时候懵懵懂懂的认为:程序还是一个蛮神奇的东西...

赵小宾 ⋅ 2014/04/23 ⋅ 0

软件设计原则

设计原则 软件设计有六大设计原则分别是 单一职责原则 开放-封闭原则 依赖倒置原则 里氏替换原则 合成聚合复用原则 迪米特原则 单一职责原则 对于一个类而言,应该仅有一个引起它变化的原因,...

寻找爱玩Tom ⋅ 2014/01/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 44分钟前 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 50分钟前 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

Spring clound 组件

Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。 润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。 Ribbon,客户端负载均衡,特性有区域亲和、重试机制。...

英雄有梦没死就别停 ⋅ 昨天 ⋅ 0

Confluence 6 重新获得站点备份文件

Confluence 将会创建备份,同时压缩 XML 文件后存储熬你的 <home-directory>/backups> 目录中。你需要自己访问你安装的 Confluence 服务器,并且从服务器上获得这个文件。 运行从 Confluence...

honeymose ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部