solid原则
1. SRP(单一责任原则)
定义:当需要修改某个类的时候原因有且只有一个。换句话说就是让一个类只做一种类型责任,当这个类需要承当其他类型的责任的时候,就需要分解这个类。 类被修改的几率很大,因此应该专注于单一的功能。如果你把多个功能放在同一个类中,功能之间就形成了关联,改变其中一个功能,就需要重新测试类中所有的功能。
上面这个类包含三个方法,都是查询客户相关信息,并且在改变其中一个方法并不会影响到其他的方法,因此我觉得是符合单一职责的。
对于一个类中编写了多个功能方法时,如果这几个功能方法相互依赖,又或者共享参数,又具备改变参数的功能,这样设计出的类,如果改变其中一个功能,就会影响其他的功能,导致所有的功能都需要重新测试,因此违反了单一职责。
我比较赞同面向对象葵花宝典上的说法,一个类只负责一组相关的事情,一个类中可以有多个方法,这些方法是相关的。SRP也不是适用于所有的类中,只适用于基础类。
2. OCP(开闭原则)
c里的函数在java里就是方法,开闭原则,我的理解就是对提供方法的一方允许扩展,对调用方法的一方不允许修改。
1.比如,定义好了一个方法,另一个方调用了这个方法,在修改这个方法的同时要保证调用方不需要修改代码。此时就需要保证方法的命名参数返回值等不可以改变。
上图是在开发中定义的一个方法,并没有编写方法实现。在开发过程为了提高编码的效率,会经常先定义好接口方法,先让上游调用该方法然后进行开发,这样两方可以 同时开发。这里也充分应用了OCP原则,只修改方法的实现,而不修改方法的命名参数返回值等。要是反复修改方法的命名等,会导致上游调用方也要修改,极大的影响了效率。
3. LSP(里氏替换原则)
通俗的定义就是子类必须实现或者继承父类所有的公有方法,入参必须一样,输出必须不比父类少。LSP就是指子类可以完全替换父类被调用方使用。
4. ISP( 接口分离原则)
不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口总要好。
客户模块不应该依赖大的接口,应该裁减为小的接口给客户模块使用,以减少依赖性。如Java中一个类实现多个接口,不同的接口给不用的客户模块使用,而不是提供给客户模块一个大的接口。
比如上图,是按照功能设计了两个接口,而不是将所有的方法放在一个接口里,较低了耦合。
5. DIP(依赖注入或倒置原则)
(1).高层模块不要依赖低层模块;
(2).高层和低层模块都要依赖于抽象;
(3).抽象不要依赖于具体实现;
(4).具体实现要依赖于抽象;
(5).抽象和接口使模块之间的依赖分离。
solid五大原则各自的侧重点不同,SRP(单一职责)用于类的设计。OCP(开闭原则)它是面向对象开发过程中总得指导思想。LSP(里氏替换原则)用于指导类继承的设计。ISP(接口隔离原则)用于指导接口的设计。DIP(依赖注入原则)用于指导如何抽象。