单一职责
- 降低类的复杂度,一个类只负责一项职责
- 提高类的可读性,可维护性
- 降低变更引起的风险
接口隔离原则
- 使用接口隔离原则前首先需要满足单一原则
- 接口需要高内聚,提高接口、类、模块的处理能力,少对外发布public方法
- 定制服务,单独为一个个提供优良的服务,拆分接口,对特定的接口进行定制,不输出不涉及的方法
- 接口设计是优先度的,接口的设计力度越小,系统越灵活,但不能过小,不能字节码编程
依赖倒置原则
程序要依赖于抽象接口,不依赖于具体实现,对抽象进行编程,不对具体实现进行编程,降低客户与实现模块间的耦合:
- 高层模块不依赖底层模块,二者都依赖其抽象
- 抽象不依赖细节(实现),细节依赖抽象
- 依赖倒置的中心思想是面向接口编程
- 相对于细节的多样性,抽象的东西要稳定的多,在java中,抽象指的是接口和抽象类,细节就是具体的实现类,java的核心是面向对象编程,比如一个人,其年龄的属性,每个人都不一样。
- 使用接口或抽象类的目的是定制好规范,不涉及任何具体的操作,具体的操作交给实现类去实现
依赖倒置原则的注意事项
- 低层模块尽量都要有抽象类或接口,或者两者都有,这样程序稳定性更好
- 变量的生命类型尽量是抽象类或接口,这样引用和实际对象间存在一个缓冲区
- 继承时遵循里氏替换原则
里氏替换原则
所有引用基类的地方必须能透明使用其子类的对象,子类可以扩展父类的功能,但不能改变父类原有的功能,面向对象继承性的思考和说明:
- 继承:父类中已经实现好的方法,实际上是在设定规范和契约,她不强制要求所有子类都必须遵守这种契约,但是子类对这些已经实现的方法的任意修改,都是对这个继承体系造成破坏
- 如果一个类被其他的类所继承,则此类需要修改时,必须考虑所有的子类,因为父类修改后,涉及的子类的功能可能产生故障
如何正确使用继承
遵循里氏替换原则:在子类中尽量不要重写父类的方法
开闭原则
一个软件实体如类,应该对扩展开放,对修改关闭,模块应尽量在不修改源代码的情况下进行扩展:
用抽象构建框架,用实现扩展细节,当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是修改原有的代码来实现变化
编程中遵循其他原则,以及使用设计模式的目的就是遵循开闭原则
迪米特法则
一个实体应尽量避免和另一个实体发现相互作用,每个类尽量减少其他类的哟来,使得系统的功能模块独立,相互之间不存在依赖关系。如果两个类真的需要建立联系,应能通过中间类或跳转类来转达。
合成复用原则
尽量使用合成|聚合的方法,而不是使用继承
对象可能被多个代表整体的对象所共享,而且不一定会随着某个代表整体的对象销毁而被销毁,例如班级删除,学生还存在,还能被学校引用。