提高代码复用率

       由于现在的互联网企业业务比较繁忙,导致产品狗不停地提需求,还总是改来改去,最后留给程序猿的时间少之又少。程序猿也不是吃素的,干脆直接copy一下代码随便搞一下实现功能就行,也谈不上所谓的精心设计了。这样的确是缩短了开发的时间,但是到处都是重复代码,大大提高了软件维护的成本,为日后软件的发展带来了隐患。如果同一功能被复制粘贴了上百次,一旦这段代码需要变更时,那简直就是一种灾难,改了这边却忘了改那边。同一段代码,当你Copy第一次的时候也许还能容忍,但是第二次的时候,你应该停下来思考一下了,这是一种优秀的编程习惯,我们要遵守DRY原则。

        我们应该多关注那些功能相似或者相近的函数或者类,因为这些地方容易存在大量相同或这相似的代码,它们应当被复用。但由于过去程序结构不合理,与其他程序过于耦合,开发人员意识不够,甚至由于开发时间的限制,它们被简单地Copy了,所以我们应该去重构它们。

  • 当重复代码存在于同一对象中时,也就是说一段代码在该对象中出现了两次以上的时候,我们应该把这段代码抽取为方法。
  • 当重复代码不在同一对象中时,那就运用抽取类的手段将重复的部分抽取到一个工具类中,然后让其他类调用。
  • 当重复代码不在同一对象中时,如果这些重复代码存在着较强的业务相关性,可将这些代码提取并封转成一个实体类,该实体类能够体现这种业务相关性。
  • 当重复代码不在同一对象中时,也可以将相同的部分抽取为父类,不同的部分还留在原来的类中,然后让其他类继承该父类。
  • 当出现继承泛滥时,将不同的部分用一个接口与多个实现来解决,也就是组合。
  • 当重构的代码被相同部分和不同部分分割成了好多碎片的时候,也就是说相同的和不相同的夹杂,而且这个时候多半有顺序,怎么破?很简单了,定义一个父类,分解成数个有顺序的方法(每个方法是一个步骤),代码中相同的部分写在父类中,不同的部分分别在子类中实现各自的步骤。

什么时候该用继承,什么时候该用组合?

  • 如果存在一种IS-A的关系(比如Bee“是一个”Insect),并且一个类需要向另一个类暴露所有的方法接口,那么更应该用继承的机制。
  • 如果存在一种HAS-A的关系(比如Bee“有一个”attack功能),那么更应该运用组合。

转载于:https://www.cnblogs.com/DreamRecorder/p/9238271.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 对 redis 的基本操作

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 一、server端安装 1、下载https://github.com/MSOpenTech/redis 可看到当前可下载版本:redis2.6 2、安装 1)解压…

JsRender 前端渲染模板常用API学习

JsRender 常用API 1. $.templates() $.templates()方法是用来注册或编译模板的,使用的情况有以下几种。 把html字符串编译编译成模板获取使用script标签声明的模板,并返回一个模板对象把html字符串或者在script标签中声明的模板注册成命名模板获取之前就…

状态图

状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应。通常我们创建一个UML状态图是为了以下的研究目的:研究类、角色、子系统、或组件的复杂行为。

我身边的手机应用开发者

手机应用火了,我身边的一位朋友(A君)也投身到开发者行列,不过他还算聪明并没有辞掉工作专做手机应用软件开发。 其原因在于他们领导打算做一款自己的应用软件,正当A君愁到底是做IOS平台还是Android平台的时候,领导说:…

学成在线--16.添加课程计划

文章目录一.需求分析二.API接口三.后端1.Dao2.Service3.Controller4.测试四.前端1.页面原型说明1)添加按钮2)视图部分3)在数据模型中添加如下变量4)定义表单提交方法和重置方法2.Api调用1)定义 api方法2)调…

mac 下的操作

nodejs在Mac下的卸载 在 node 官网上下载的安装包,用安装包安装的node.应该可以用一下命令行卸载: 在终端输入以下命令: sudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*} 删除/usr/local/lib中的…

理解 maven 的核心概念

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 本文以类图的方式,介绍 maven 核心的 12 个概念及相互之间的关系。 Table of Contents 1 maven管理的目标:工程…

时间跟踪图

事件跟踪图实质上是扩充的脚本,可以认为事件跟踪图是简化的UML顺序图。

1088. [SCOI2005]扫雷Mine【网格DP】

Description 相信大家都玩过扫雷的游戏。那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来。万圣节到了 ,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数…

spring data jpa和mybatis的不同

使用spring data JPA和mybatis都是用来访问数据库,但他们的分工不同: 1.spring data jpa默认使用hibernate作为ORM实现,是spring 提供的一套jpa接口,使用spring data jpa主要完成一些简单的增删改查功能。 2.对于复杂的查询功能会…

函数式编程很难,这正是你要学习它的原因

很奇怪不是,很少有人每天都使用函数式编程语言。如果你用Scala,Haskell,Erlang,F#或某个Lisp方言来编程,很可能没有公司会花钱聘你。这个行业里的绝大部分人都是使用像Python,Ruby,Java或C#等面…

函数依赖

设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。 X→Y&#x…

Java面试——线程池

1、类比介绍 假如有一个工厂,工厂里面有10个工人,每个工人同时只能做一件任务。 因此只要当10个工人中有工人是空闲的,来了任务就分配给空闲的工人做; 当10个工人都有任务在做时,如果还来了任务,就把任务进…

C#关键字的使用

params object[] 用于函数多参数的定义public static void Write(string format, params object[] arg);explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。 例如,在下面的示例中,此运算符将名为 Fahrenheit 的类转换为名为 Ce…

maven 中 pom.xml 配置文件标签说明,dependencyManagement和dependencies区别

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 参考:http://zhaoshijie.iteye.com/blog/2094478http://blog.csdn.net/cpf2016/article/details/45674377 还有一篇转载文章…

学成在线--17.我的课程

文章目录一.需求分析二.API接口三.PageHelper1.PageHelper介绍2.添加依赖3.配置pageHelper四.Dao1.mapper 接口2.mapper.xml映射文件3.测试Dao五.Service六.Controller七.前端1.创建course_list.vue2.路由3.定义API方法4.前端视图course_list.vue详解1)API调用--在视…

码是数据系统中的基本概念。所谓码就是能唯一标识实体的属性或属性集合,他是整个实体集的性质,而不是单个实体的性质。 主属性与非主属性 包含在任何一个候选码中的属性 ,称为主属性(Prime attribute)。 不包含在任何…

关于C编程的一点感受

刚毕业的时候用了两个多月的C语言编程,总的来说对它还是很有感受的,C是一个过程式语言,没有像C,Java等OOP语言这样那样的一系列的规则和限制;它比较灵活,简洁,高效;这些是给我的印象最深的。这是…

如何打造高效的多任务、高并发的网络服务器系统?

同一个功能的软件,不同的团队,不同工程师去实现,肯定是千差万别,甚至从根本上完全不同。所以软件开发在未来很长时间内仍然是一项工匠的手工劳动,尤其像多任务,高并发,偏底层这种对实现技巧比较…

BZOJ.2780.[SPOJ8093]Sevenk Love Oimaster(广义后缀自动机)

题目链接 \(Description\) 给定n个模式串,多次询问一个串在多少个模式串中出现过。(字符集为26个小写字母) \(Solution\) 对每个询问串进行匹配最终会达到一个节点,我们需要得到这个节点所代表的子串出现在多少个模式串中。 建立广义后缀自动机。每次插入…