薄情先生|你所需要知道的代码整洁之道( 二 )
把具有相同特征或相似功能的类 , 抽象成接口或抽象类 , 让具体的实现类继承这个抽象类(或实现对应的接口) 。 抽象类(接口)负责定义统一的方法 , 实现类负责具体功能的实现 。
是否一定要遵循这些设计原则
- 软件设计是一个逐步优化的过程
- 不是一定要遵循这些设计原则
简单、实用的原则LoD原则(Law of Demeter)Each unit should have only limited knowledge about other units: onlyunits "closely"related to the current unit.Only talk to your immediatefriends,don't talk to strangers.
每一个逻辑单元应该对其他逻辑单元有最少的了解:也就是说只亲近当前的对象 。 只和直接(亲近)的朋友说话 , 不和陌生人说话 。
这一原则又称为迪米特法则 , 简单地说就是:一个类对自己依赖的类知道的越少越好 , 这个类只需要和直接的对象进行交互 , 而不用在乎这个对象的内部组成结构 。
例如 , 类A中有类B的对象 , 类B中有类C的对象 , 调用方有一个类A的对象a , 这时如果要访问C对象的属性 , 不要采用类似下面的写法:
a.getB().getC().getProperties()复制代码
而应该是:a.getProperties()复制代码
KISS原则(Keep It Simple and Stupid)Keep It Simple and Stupid.保持简单和愚蠢 。
- “简单”就是要让你的程序能简单、快速地被实现;
- “愚蠢”是说你的设计要简单到任何人都能理解 , 即简单就是美!
不要重复自己 。
不要重复你的代码 , 即多次遇到同样的问题 , 应该抽象出一个共同的解决方法 , 不要重复开发同样的功能 。 也就是要尽可能地提高代码的复用率 。
要遵循DRY原则 , 实现的方式非常多:
- 函数级别的封装:把一些经常使用的、重复出现的功能封装成一个通用的函数 。
- 类级别的抽象:把具有相似功能或行为的类进行抽象 , 抽象出一个基类 , 并把这几个类都有的方法提到基类去实现 。
- 泛型设计:Java 中可使用泛型 , 以实现通用功能类对多种数据类型的支持;C++中可以使用类模板的方式 , 或宏定义的方式;Python中可以使用装饰器来消除冗余的代码 。
YAGNI原则(You Aren't Gonna Need It)You aren't gonna need it,don't implement something until it isnecessary.
你没必要那么着急 , 不要给你的类实现过多的功能 , 直到你需要它的时候再去实现 。
- 只考虑和设计必需的功能 , 避免过度设计 。
- 只实现目前需要的功能 , 在以后需要更多功能时 , 可以再进行添加 。
- 如无必要 , 勿增加复杂性 。
- 第一次实现一个功能时 , 就尽管大胆去做;
- 第二次做类似的功能设计时会产生反感 , 但是还得去做;
- 第三次还要实现类似的功能做同样的事情时 , 就应该去审视是否有必要做这些重复劳动了 , 这个时候就应该重构你的代码了 , 即把重复或相似功能的代码进行抽象 , 封装成一个通用的模块或接口 。
- 查询(Query):当一个方法返回一个值来回应一个问题的时候 , 它就具有查询的性质;
推荐阅读
- 张先生18823381855|转让海翼国际控股
- 先生|一停就是10年,60万豪车竟没人要?车主说:我不能动……
- 明星八卦|靳东亮相新戏发布会,阵容曝光被批不如《恋爱先生》,你怎么看
- 9月7日晚间|柏堡龙:实际控制人陈伟雄先生、陈娜娜女士解除质押共约2690万股
- 先生|60万豪车竟没人要?车主说:我不能动……,一停就是10年
- 趣头条|全新一代奔驰S级全球首发!改变不止于你所见!
- 包先生|什么包显品味还不撞包?看看这篇你就知道了!
- 疫情后的九先生轰趴馆市场前景依旧稳定
- 薄情先生|热烈祝贺首批CPAC分散控制系统产品正式交付
- 薄情先生|汉华推出氮化镓PD快充散热解决方案,全方位满足电源厂商需求