不要再用面向对象语言编写面向过程的代码了

发布于: 10 小时前

面向对象语言三大特性

我们都知道面向对象的三大特性:封装、继承、多态。但是其实这三大特性都不是面向对象语言独有的,C语言可以用Struct结构体实现封装,可以通过在结构体A中包含结构体B来完成类似A继承B的的效果。C语言也可以通过函数指针实现多态,但是用函数指针实现多态比较复杂。但是面向对象语言让这三大特性使用起来很方便。

多态是很强大的特性,通过多态,我们可以实现运行时绑定,即接口或者抽象类引用到程序运行时可以绑定不同的实现类对象,从而可以运行时替换程序逻辑。

面向对象设计的目的和原则

面向对象设计的目的是为了实现强内聚、低耦合的目标。从而使系统

  • 易扩展-易于增加新功能

  • 更强壮-不容易被粗心码农破坏

  • 可移植-能够在多样的环境下运行、复用更容易

  • 更简单-容易理解和维护

面向对象设计的原则

为了实现上面的面向对象的设计目标,很多前辈大佬总结出了很多指导原则,这些原则是独立于编程语言的,Java可以采用,C++同样可以采用,甚至非面向对象编程语言也可以用。

设计原则与设计模式

设计原则是设计模式之上的,更抽象的原则,包括:开闭原则、依赖倒置原则、里氏替换原则、单一职责原则、接口隔离原则。

要想写好代码,业务代码就不能来一个需求实现一个需求,从上到下,用面向过程的思想编写程序,比如有一个需求,任务调度系统任务执行完(假设执行方法叫execute)了之后要把日志保存到hdfs上,然后过一段时间产品经历要求任务执行完了给相关业务方提供的url发送一个成功回调。作为菜鸟,我们可能打开execute方法,在最后加上一个doCallback来回调业务方。那过一段时间产品经理说任务执行完了,再发送一封邮件给一些人,你还打算再打开execute方法继续在末尾追加逻辑么?这样明显的违反了“开闭原则”,即对修改关闭,对扩展开放。

如果考虑用观察者模式,提供一个观察者接口,接口中有一个方法finish,任务执行类里面有一个观察者列表,每个对执行结果感兴趣的逻辑都可以实现观察者接口(比如发邮件的逻辑可以放到EmailObserver类,它实现观察者接口,在finish方法中写发邮件的逻辑)。这样产品经理再要对任务执行结果做些什么,都可以增加观察者来解决,不用修改execute方法,实现了对扩展开放,对修改关闭。

发布于: 10 小时前 阅读数: 12
用户头像

鸠摩智

关注

会当凌绝顶,一览众山小 2018.04.26 加入

还未添加个人简介

评论

发布
暂无评论
不要再用面向对象语言编写面向过程的代码了