前几天有同学留言叫讲一下设计模式。我们先锻炼好一些基本能力,以后再扩展就会更容易。
今天说说面向对象设计的五大基本原则。既然是基本原则,那是我们在各层次的模块、接口的设计中都会参考遵守的。熟练运用它们之后,就已经能够大幅提升代码设计的质量。再遇到针对性的情景时,辅助运用编程语言的一些特性,就会发现“咦,这不就是工厂模式么?这不就是装饰器模式么?这不就是适配器模式么?这不就是Java的XX模式么?这不就是Pythonic的XX模式么?”
SOLID简介
SOLID是由罗伯特·C·马丁(即Bob大叔,其著作有《敏捷软件开发——原则、模式与实践》、《Clean Code》)在21世纪早期引入的记忆术首字母缩略字,指代了面向对象编程和面向对象设计的五个基本原则(单一职责、开闭原则、里氏替换、接口隔离以及依赖反转)。
注意:原则并不是规则,更不是教条,对智者来说是指导,对愚者来说是遵从。
首字母 | 指代 | 概念 |
---|---|---|
S | 单一职责 | 对象应该仅具有单一的功能 |
O | 开闭 | 软件体应该对扩展是开放的,但对修改封闭的 |
L | 里氏替换 | 程序中的对象应该是可以在不改变程序正确性的前提下 被它的子类对象所替换的 |
I | 接口隔离 | 多个特定客户端接口要好于一个宽泛用途的接口 |
D | 依赖反转 | 高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口; 抽象接口不应该依赖于具体实现,而具体实现则应该依赖于抽象接口。 |
在SOLID的指导下,容易编写易于维护的、复用率高的、易于测试的面向对象代码。
应用举例
后文对SOLID原则的应用示范均基于下述需求。要求以OOP的方式实现一段“洗车服务”的代码。