1.开—闭原则(Open-Closed Principle, short for OCP)
该原则讲一个软件实体应当对扩展开放,对修改关闭。说的是在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。换言之,应当可以在不必修改源代码的情况下改变这个模块的行为。实现开闭原则的关键是抽象化。在"开—闭"原则中,不允许修改的是抽象的类或者
接口,允许扩展的是具体的实现类,抽象类和接口在"开—闭"原则中扮演着极其重要的角色,在设计过程中既要预知可能变化的需求,又要预见所有可能已知的扩展。
2.依赖倒置原则(Dependence Inversion Principle DIP)
该原则讲的是:要依赖于抽象,不要依赖于抽象。简单地说,DIP要求客户端依赖于抽象耦合,依赖倒转原则的表述为:抽象不应当依赖于细节;细节应依赖于抽象;其另一种表述为:要针对接口编程,不要针对实现编程。针对接口编程的意思是指:应当使用java接口和抽象java类进行变量的类型声明、参量的类型声明、方法的返还类型声明以及数据类型的转换等。要保证做到这一点,一个具体的java类应当只实现java接口和抽象java类声明过的方法,而不应该给出多余的方法。
3.里氏代换原则(LSP)
该原则严格表达为:如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得T1定义的所有程序P在所有的对象o1都代换为o2,程序p的行为没有变化,那么类型T2的是类型T1的子类型。换言之,一个软件实体如果使用的是一个基类的话,你们一定适用于其子类,而且它根本不能觉察出基类对象和子类对象的区别。里氏替换原则的是继承复用的及时。只有当衍类可以替换掉基类,软件单位的功能不能受到影响时,基类才能真正被复用,而衍生类也才能够在基类的基础上增加新的行为。
4.接口隔离原则(Interface Segregation Principle ISP)
该接口讲的是使用多个专门的接口比使用一个总接口要好。换言之,从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小的接口上的。
5.合成/聚合复用原则(Composite/Aggregate Reuse Principle C
ARP)
合成/复用原则常又叫做合成复用原则。合成/聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。该原则的另一个简短表达为:要尽量使用合成/聚合,尽量不要使用继承。
6.迪米特法则(Law of Demeter LoD)
迪米特法则又称最少知识原则,就是说一个对象应当对其他对象有尽可能少的了解,可以简述为"不要给陌生人说话"。与该法则相关的一个概念—调用转发(Call Forwarding),其内涵是指某人在需要陌生人帮助时不与陌生人直接打交道,仅需与其熟知该陌生人的朋友打交道即可。