经过复习以及做题,对面向对象设计原则有了更加深刻的理解,相信会对你有所帮助。
- SOLID原则包括什么:
SRP(The Single Responsiblity Principle):单一责任原则
OCP(The Open-Clised Principle):开放封闭原则
LSP(The Liskov Substitution Principle):Liskov 替换原则
DIP(The Dependency Inversion Principle):依赖转置原则
ISP(The Interface Segregation Principle):接口隔离原则
- 分别对上述原则进行分析理解:
1.SRP:单一责任原则,顾名思义,就是单一的责任,要求我们最好一个类只实现一个责任。那责任是什么呢,责任就是功能,如果刚接触,你可能会疑惑,功能是不是就只是一个方法呢,那是不正确的,正确的理解是在一个类中通过多种方法的组合实现一个功能,比如说在一个Car类中你可以实现开车功能,包括点火、挂挡、踩油门,而你去接送一个人这也是一个功能,虽然前提还是要实现开车,但这就没必要再放在Car里了,你大可以再设计一个类去实现接送功能,这样不是更好的解耦了吗。
2.OCP:首先你要明白什么是开放封闭原则,它是对外部扩展的开放,对内修改的封闭。其实简单来说,就是在你要实现某个功能时,实现的方法变了,别去傻傻的修改方法里的代码,而是去外部扩展,要不然难道你要换个实现方法就改一遍代码,换一次就改一次,那下一次我要用之前某次的方法重新实现呢,你再给改回来吗难道。
3.LSP:其实这个没什么好说的,记住它的要求即可,对它的理解就是,能用父类的地方一定可以用子类代替,这样能帮你更好的理解协变和逆变。
4.DIP:对DIP的理解就是,去依赖抽象,而不是去依赖具体,其实我感觉它和OCP有相似之处,你在依赖具体的时候,同样,当我想要去更改实现某功能中的某一个方法时,那你还是需要去你的内部实现代码中去该,又是一遍一遍的改啊改啊,但是如果你依赖的是抽象呢,那在客户端只要向内部传入不同的参数,就可以实现更改,这样岂不是更好。
5.ISP:这个原则我感觉其实和SRP很相似,让你的接口尽可能的小,可以适当的多写几个接口,分别实现不同的功能,这样在依赖的过程中,并不会产生冗余。比如你在一个接口中一下定义了好多的方法,那你要去写一个实现这个接口的实例类时,就要把这些方法全部重写一遍,但你可能仅仅只需要使用其中的某几个方法,那这样岂不是得不偿失,包含大量无用方法,还浪费时间。