为了提高我们程序的可维护性,我们希望能进行高内聚,低耦合的模块化编程。
耦合是不同模块间的联系,降低模块的耦合,就像积木一样,我们可以更轻松的组合各个模块,同样一个模块出现异常影响较小,我们可以更轻松地进行替换或修改。
高内聚则是尽可能让一个模块只负责一个任务,达到最大限度的聚合。
下面我们介绍面向对象设计原则solid
1.SRP 单一责任原则:不应该有多于 1 个原因让你的 ADT 发生变化, 否则就拆分开。也就是说尽量让一个类只负责一个职责。比如汽车要启动,刹车,接送乘客,那么这个类就包含了太多的职责,可以将接送乘客的行为交给司机,这样就实现了程序更高内聚更低耦合的目的。
2.OCP:面向变化的开放/封闭原则
对扩展性的开放:模块的行为应是可扩展的,从而该模块可表现出新的行为以满足需求的变化
对修改的封闭性:模块自身的代码是不应被修改的,扩展模块行为的一般途径是修改模块的内部实现
对代码频繁修改不是好的习惯,比如要写出租车这一类,可以先写car接口或抽象类,这样程序更加容易修改或者扩展。
3.关键的解决方案:抽象技术 LSP:Liskov 替换原则
4.ISP:接口隔离原则 不能强迫客户端依赖于它们不需要的接口:只提供必需的接口
也就是说接口要低耦合,如果一个接口里含有的方法过多,类对其进行继承时,会需要实现很多的多余方法,可以将其写成多个高内聚的接口,这样减少了多余调用,提高了灵活性
DIP:依赖转置原则 抽象的模块不应依赖于具体的模块 ,具体应依赖于抽象,一个类依赖于另一个类最好依赖于接口而非具体实现。
一些方法最好针对抽象类而非具体实例,比如开出租车,方法可以针对开车,这样开不同车都只要改客户端方法,更方便也更容易修改。