1.单一职责原则
一个类中应该是一组相关性很高的方法、数据和封装。明显不一样的功能就不应该放在一个类中。方法、接口等同理。
>>开始适应时可以先对要实现的内容用UML图整理一下,根据UML图来进行解耦、拆分。
2.开闭原则
软件中的对象应该对于扩展是开放的,对于修改是封闭的。
当软件/应用需要修改/变化时,应该尽量通过扩展的方式来实现变化,而不是通过修改已有的代码来实现。
>>通过抽象类、接口等来实现扩展的部分。
3.里氏替换原则
简单定义:所有引用基类的地方都必须能透明地使用其子类的对象。
开闭原则和里氏替换原则往往一起体现。
4.依赖倒置原则
关键点:
(1)高层模块不应该依赖低层模块,两者都应该依赖其抽象
(2)抽象不应该依赖细节
(3)细节应该依赖抽象
抽象:指抽象类、接口等不能直接被实例化的对象
细节:实现类,即可以直接被实例化的对象。
低层模块:具体实现类
高层模块:调用端
实际上,低层模块和高层模块都是抽象的实例
5.接口隔离原则
客户端不应该依赖它不需要的接口,即类间的依赖关系应该建立在最小的接口上。
6.迪米特原则/最少知识原则
一个对象应该对其他对象有最少的了解,即调用者或依赖者只需要知道它需要的方法即可。
【个人思考】
陈述1:
继承的缺点:继承是侵入性的,只要继承就必须拥有父类的所有属性和方法,因此可能造成子类代码冗余、灵活性降低。
推论1:
在不清楚该用接口还是用扩展类来实现的时候,可以从这个方面考虑:如果同类的扩展的功能需要依赖父类的地方较多,则用子类的方法实现;反之则用不同的类implements同一个接口来实现。
——2017.7.27