从面向对象的六大原则讨论代码重构

1、前言

个人博客系统还在开发中。。。
欢迎各位新手加入。。。
欢迎大佬指正。。。
本文简单从面向对象的六大原则的角度讨论代码重构。

1.1小结

今天,看了关于设计模式的文章,虽然设计模式很抽象(就是不知道咋用),而且学习设计模式的时候
很枯燥,面对一个复杂的功能,如何去设计代码或者对现有的代码进行重构是很有趣的问题,就好比
你做一件事和重复去做这件事之间存在的关系。设计代码就是去做一件事情,代码重构就是去重复做这件事情。
那么,对于一件事情,
Ⅰ、首先,我其实是很懵逼的,我为什么要去做暂时不用考虑,重点是我该怎么做,这让我必须评估自己的认知。
Ⅱ、其次,我的认知是有限的,我在此基础上建立了自己的知识库,知道自己哪些事情能做、那些事情可以努力做。
Ⅲ、最后,我把这件事情做完了,领导叫我汇报一下过程,我说客户知道。
我就是这么理解去做一件事情的,付出和实践只有我或者看到我做这件事的人知道,这个例子显然不够明显,很显然,
我在说啥,我自己都不知道,但是我说一下如果我不给领导汇报过程,可能我这个月会吃不上饭了,所以对于我而言,
这个过程十分重要,而且效率要好,饭才能吃饱。设计代码就是如此,实现一段高效的代码并不是一件容易的事情,甚至
要不停的修改,这就要重复去做重构代码的事情。

1.2举例

今天的主题是面向对象的六大原则,但是怎么去满足这些原则才是关键,原则是一个抽象的东西,稍不注意你就违背了,
但是问题不大,做人要有分寸,做事要有原则。设计代码这件小事当然问题不大,就是多敲敲、多改改就能满足原则的。
举个例子,张三和李四是象棋特级大师,一天他们在某杯上交锋了,他们精湛的棋艺和精妙的运子下出了江湖名局,但是
这盘名局只有他们两人清楚其中的体验,而这时一个新手复制了他们的招数,做成了一个视频,还请来了解说大师,发布到了某音,最后留下了一个标题《炮比车厉害》引人关注。话不多说,我来描述一下这个过程。
张三拿起棋盘上的一颗棋子。。。
张三走一步。。。
李四拿起棋盘上的一颗棋子。。。
李四走一步。。。
一个小时后。。。
观众解散,裁判公布比赛结果。。。
现在,我是那个新手,我来复制这个名局。。。

2、单一职责原则与接口开放

首先,我要说一下单一职责原则,就是一个类只承担自身特有的职责,一般情况下这里的单一职责就是一个接口,我们的接口里面都是开放的方法,所以在代码重构的最后阶段一定要开放一系列的接口,比如,程序的入口接口,程序的扩展接口等等。这个原则不难理解。

3、开放封闭原则与抽象封装

其次,我说一下开放封闭原则,就是对于扩展是开放的,对于修改是封闭的,一般情况下,我们设计的代码在加入新功能的时候要求不需要改变已有代码的结构,比如在测试代码里面程序执行时调用的接口和创建对象的过程。所以,在重构代码的最初阶段,一定要从测试代码的main函数里面下手,尽量用类和方法的形式将主函数的逻辑按照一定的条理列举成线性的步骤。

3、里氏替换原则与继承分离

第三是里氏替换原则,就是用子类对象来替换父类对象。这个过程就考验抽象设计能力了,一般情况下,接口只开放自己特有的功能,那么对于这个接口的一个实现类是什么样子的呢,就是它必须有一个构造函数,这个构造函数的参数是一个扩展的内部对象的构造参数,这样这个扩展的内部对象就被封装到了接口的实现类里面。而内部对象的声明可以是抽象的,随着参数的变化,在接口实现类的内部实现内部对象的具体化,在实现类的方法里面实现内部对象抽象方法的调用。所以,这就需要,在测试代码的重构时候,把各个步骤需要的对象和方法进一步抽象为抽象类或者接口。

4、依赖倒置原则与实现分层

第四是依赖倒置原则,基本要求是:
Ⅰ、高层模块不能依赖低层模块,两者都应依赖于抽象。
Ⅱ、抽象不该依赖细节
Ⅲ、细节应依赖抽象
一个比较简单的理解是高层模块访问底层模块的方式是通过其实现类扩展细节来实现的,而这个细节一般是一个开放的方法,该方法的参数来自于细节需要的对象里面,简单来说就是在整体功能需要多少个细节来实现,就需要多少个外部对象参与细节对应的方法。这样从接口到实现类再到细节的实现就形成了分层。

5、接口隔离原则与细节解耦

然后是接口隔离原则,就是类间的依赖关系应建立在最小的接口上,就打个比方,你不能因为要使用一个类里面的一个方法就把这个类作为外部对象传递到使用者的内部,而是应该抽象出一个接口。

6、迪米特原则与逻辑重组

最后是迪米特原则,就是**类内部只需要实现需要的接口方法即可,其他一律不管。**比如说,一个功能需要三个步骤来完成,那么我们首先设计一个接口,抽象一个抽象类,设置三个抽象方法,然后将这个抽象类实现接口,在对应的方法中调用该抽象类的步骤对应的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值