【软件重构】代码坏味道之滥用面向对象

举报
huahua.Dr 发表于 2022/09/03 17:45:48 2022/09/03
【摘要】 一、滥用异曲同工的类(1)定义:两个类中有着不同的函数,却在做着同一件事情,那么就存在坏味道,重复类,重复的代码(2)问题影响:会出现函数功能类似的存在于两个类中,导致代码重复,维护和阅读困难,不知道是使用哪个类的函数。 注意特殊情况:如果两个功能类似相同的类存在于两个不同库lib里面,也就是编译好的类库,咱们不能改变它,只能选择其中一个使用(3)如何消除异曲同工的类1)修改函数名。如果两个...

一、滥用异曲同工的类

(1)定义:

两个类中有着不同的函数,却在做着同一件事情,那么就存在坏味道,重复类,重复的代码

(2)问题影响:

会出现函数功能类似的存在于两个类中,导致代码重复,维护和阅读困难,不知道是使用哪个类的函数。

 注意特殊情况:如果两个功能类似相同的类存在于两个不同库lib里面,也就是编译好的类库,咱们不能改变它,只能选择其中一个使用

(3)如何消除异曲同工的类

1)修改函数名。如果两个函数只是名称类似,实质功能确实不一样的话,可以使用修改函数名的方式,明确每个函数是干什么的。

2)搬移函数。如果该类中有函数与引用类关联比较大,那么可以将该函数直接搬移到引用类中,将旧函数直接变成委托函数。

3)修改函数参数。如果两个功能类似的函数存在只是因为参数不用而输出不同的信息。那么可以将参数抽象成一个对象,函数使用该对象作为入参,合并成一个函数即可。

4)提炼超类。如果两个类中,存在有相似的特性,那么可以直接提取一个超类,使用继承或者组合的方式,实现公用,减少重复代码。

二、滥用类的继承体系

1)定义:

子类应该继承超类的函数和数据,但有时子类却不想使用或者不需要继承超类的部分函数及数据,只想使用部分功能和字段。出现了不同的子类,容易存在混乱,滥用的情况。

2)问题影响:

1)由于超类基本都是抽象的,包含了没有具体实现的接口,而子类又不想实现这些接口,这就违背了继承原则

2)子类只使用超类的部分功能和字段,那么他们之间的继承体系设计就存在不合理。

3)如何解决继承体系的问题

1创建兄弟类。为子类创建兄弟类,使用函数下移或者字段下移,将所有用不到的函数和字段推给兄弟类。超类只留公共的函数

2函数/字段下移:就是将超类中的函数/字段复制声明到每一个需要测函数的子类中,不需要的子类则不用复制声明,然后删除超类中的该函数/字段

3修改子类。如果子类确实不需要实现超类的接口,并且超类函数也不能移动,那么子类想复用超类的部分功能,只能使用委托类取代子类或者超类,将子类与超类划清界限。

4以委托(组合)取代子类/超类。如果两个超类与多个子类存在非常紧密的关系,修改超类都很可能破坏所有子类。可以使用委托解决这个问题,对应不同的变化原因,可以委托给不同的类,委托是对象之间常规的关系,与继承关系相比,使用委托关系时接口更清晰,耦合更少,委托即是组合,因此存在一个原则:对象组合由于继承;但是还是先建议使用继承,如果继承遇到这种问题后,才考虑使用委托重构。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。