面向对象的设计原则(OOD:Object Oriented Design)

506 阅读2分钟

背景:在一次面试中被问到:“你做过SDK开发,那你说说你开发中用到了哪些面向对象的设计原则?当时心里OS:“是在问我:继承、封装、多态”,后面回头想想,好像不对呀,这个是面向对象的三大特性吧?所以,之后,就有了如下的总结:

一、单一职责(SRP:Single Responsibility Principle)

官方解释:

一个类只负责一种职责。

我的理解:

一个类是一组相关性很高的函数和数据的封装。

二、开闭原则(OCP:Open Close Principle)

官方解释:

一个软件实体应对扩展开发,对修改关闭。

我的理解:

一个类开发完成,应尽量的不要去修改这个类,否则可能会破坏原来系统的功能,可以通过继承来扩展增加类的功能。但是这个是灵活的,不是限制死一定就不能修改原来的类,因为你原来的类可能起初版本写的很糟糕。

三、里氏替换原则(LSP:Liskov Substitution Principle)

官方解释:

所有引用基类(父类)的地方必须能透明地使用其子类的对象。

我的理解:

去掉父类,替换成子类,也能保证原来的功能正常运行。

四、依赖导致原则(DIP:Dependency Inversion Principle)

官方解释:

抽象不应该依赖于细节,细节应当依赖于抽象,要针对接口编程,而不是针对实现编程。高层模块不应该依赖于低层模块,两者应该依赖于抽象。

我的理解:

针对接口编程,而不是针对实现编程。

五、接口隔离原则(ISP:Interface Segregation Principle)

官方解释:

使用多个专门低接口,而不是使用单一的总接口

我的理解:

客户端不应该依赖它不需要的接口。

六、迪米特原则(知道得最少的原则)(LoD:Law of Demeter ( Least Knowledge Principle))

官方解释:

一个软件实体应该尽可能少的与其他实体发生交互作用。

我的理解:

一个类对自己调用的类知道的越少越好。

参考文章:

知乎作者:shusheng007 掘金作者:J_Knight_

总结

曾经,我也奉承一种不屑:“面试造航母,入职拧螺丝”,后来,我慢慢的觉得“书到用时方恨少,能知道多是多少”。有些理论,其实我们在不知不觉中已经使用了。