上期我们讲到开闭原则和里氏替换原则面试对象设计原则(上),这期我们紧接着讲面试对象设计原则中的依赖倒置原则、单一职责原则和合成复用原则。
依赖倒置原则
解析定义: Object Mentor 公司总裁罗伯特·马丁(Robert C.Martin)于 1996 年在C++ Report上发表的文章。核心思想:面向接口编程,不要面向实现编程
重要作用:
● 降低类间的耦合性
● 提高系统的稳定性
● 减少并行开发引起的风险
● 提高代码的可读性和可维护行
实现方法:
每个类尽量提供接口抽象类,或者两者都具备
变量的声明类型尽量是接口或者抽象类
任何类不应该从具体类派生
依赖倒置案例:
缺点代码
修正代码
单一职责原则
解析定义:由罗伯特·C.马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中提出的.单一职责原则规定一个类应该有且仅有一个引起它变化的原因.否则类应该被拆分.
如果承担了太多的职责,至少存在以下两个缺点:
1. 削弱或者抑制其他职责的
2. 客户只要一个职责的功能,其他的功能不需要,如果不是单一的职责,那么需要购买全部功能
重要作用:
降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单得多
提高类的可读,可维护性,变更引起的风险降低.
核心本质:
对类的解耦,方法的解耦.可以理解为穿上衣和裤子.和连体衣服的区别.去个厕所,后续请自行脑补
合成复用原则
解析定义:合成复用原则又叫组合/聚合复用原则。它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。
通常类的复用分为继承复用和合成复用两种,继承复用虽然有简单和易实现的优点,但它也存在以下缺点。
1.继承复用破坏了类的封装性。因为继承会将父类的实现细节暴露给子类,父类对子类是透明的,所以这种复用又称为“白箱”复用。
2.子类与父类的耦合度高。父类的实现的任何改变都会导致子类的实现发生变化,这不利于类的扩展与维护。
3.它限制了复用的灵活性。从父类继承而来的实现是静态的,在编译时已经定义,所以在运行时不可能发生变化。