背景:在一次面试中被问到:“你做过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_