2020-04-20 学习
0x01 面向对象
在日常开发过程中,我们经常会使用写一些面向过程的代码,比较显著的例子是全局变量和全局方法。全局变量是将所有的静态成员变量或者常量放在一个类中,这样做不要的地方是,破坏了封装特性。
一个Constants类中可能会有大量的静态变量或者常量,其他类或者模块使用这个类时,需要不断对这个文件进行编译,费时费力。因此,我们应该尽量避免大Constants类的存在。可以将大Constants类按照功能分为小的文件,也可以根据模块作用域、类作用域进行划分。
另一个常见的例子是Utils类。Utils类只保留方法,不包括数据,所以也是面向过程的思想。那我们如何按照面向对象的思路进行设计呢?首先需要思考一下为什么需要Utils类?为的是提高代码复用性,可能几个类使用到了相同的数据处理逻辑,所以把相同的代码提取出来作为Utils类。那么既然是这样的话,我们为什么不使用继承特性呢,把重复代码放在父类中。当然并不是所有情况都适合抽象成父类,需要视情况而定。
0x02 基于接口而非实现编程
一定要有抽象意识、封装意识、接口意识。在定义接口的时候,不要暴露任何实现细节。接口的定义只表明做什么,而不是怎么做。而且,在设计接口的时候,我们要多思考一下,这样的接口设计是否足够通用,是否能够做到在替换具体的接口实现的时候,不需要任何接口定义的改动。