设计原则
开-闭原则(OCP Open-Closed Principle)
开-闭 原则讲的是:一个软件实体应当对扩展开放,对修改关闭。
这个原则说的是,在设计一个模块的时候,应当使这个模块可以在不被修改的前提下
被扩展。换言之,应当可以在不必修改源代码的情况下改变这个模块的行为。
里氏代换原则(LSP Liskov Substitution Principle)
一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它根本不能
察觉出基类对象和子类对象的区别。而反过来代换则不成立。
里氏代换原则是继承复用的基石。只有当衍生类可以替换掉基类,软件单位的功能不
会受到影响时,基类才能真正被复用,而衍生类也才能在基类的基础上增加新的行为。
依赖倒转原则(DIP Dependence Inversion Principle)
抽象不应当依赖于细节,细节应当依赖于抽象。
要针对接口编程,不要针对实现编程。
针对接口编程的意思就是说,应当使用java接口和抽象java类进行变量的类型声明、
参量的类型声明、方法的返还类型声明,以及数据类型的转换等。
不要针对实现编程的意思就是说,不应当使用具体java类进行变量的类型声明、
参量的类型声明、方法的返还类型声明,以及数据类型的转换等。
要保证做到这一点,一个具体的java类应当只实现java接口和抽象java类中声明过
的方法,而不应当给出多余的方法。
接口隔离原则(ISP Interface Segregation Principle)
接口隔离原则讲的是:使用多个专门的接口比使用单一的总接口要好。
定制服务(Customized Service)也是一个重要的设计原则。它的意思是说,如果客户端
仅仅需要某一些方法的话,那么就应当想客户端提供这些需要的方法,而不要提供不需
要的方法。
合成/聚合复用原则(CARP Composite/Aggregate Reuse Principle)
就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过
向这些对象的委派达到复用已有功能的目的。
迪米特法则(LoD Law of Demeter)
又叫做最少知识原则(LKP Least Knowledge Principle),就是说,一个对象应当对其他
对象有尽可能少的了解。
广义迪米特法则在类的设计上的体现:
优先考虑将一个类设置成不变类
尽量降低一个类的访问权限
谨慎使用Serializable
尽量降低成员的访问权限
限制局域变量的有效范围
开-闭 原则讲的是:一个软件实体应当对扩展开放,对修改关闭。
这个原则说的是,在设计一个模块的时候,应当使这个模块可以在不被修改的前提下
被扩展。换言之,应当可以在不必修改源代码的情况下改变这个模块的行为。
里氏代换原则(LSP Liskov Substitution Principle)
一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它根本不能
察觉出基类对象和子类对象的区别。而反过来代换则不成立。
里氏代换原则是继承复用的基石。只有当衍生类可以替换掉基类,软件单位的功能不
会受到影响时,基类才能真正被复用,而衍生类也才能在基类的基础上增加新的行为。
依赖倒转原则(DIP Dependence Inversion Principle)
抽象不应当依赖于细节,细节应当依赖于抽象。
要针对接口编程,不要针对实现编程。
针对接口编程的意思就是说,应当使用java接口和抽象java类进行变量的类型声明、
参量的类型声明、方法的返还类型声明,以及数据类型的转换等。
不要针对实现编程的意思就是说,不应当使用具体java类进行变量的类型声明、
参量的类型声明、方法的返还类型声明,以及数据类型的转换等。
要保证做到这一点,一个具体的java类应当只实现java接口和抽象java类中声明过
的方法,而不应当给出多余的方法。
接口隔离原则(ISP Interface Segregation Principle)
接口隔离原则讲的是:使用多个专门的接口比使用单一的总接口要好。
定制服务(Customized Service)也是一个重要的设计原则。它的意思是说,如果客户端
仅仅需要某一些方法的话,那么就应当想客户端提供这些需要的方法,而不要提供不需
要的方法。
合成/聚合复用原则(CARP Composite/Aggregate Reuse Principle)
就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过
向这些对象的委派达到复用已有功能的目的。
迪米特法则(LoD Law of Demeter)
又叫做最少知识原则(LKP Least Knowledge Principle),就是说,一个对象应当对其他
对象有尽可能少的了解。
广义迪米特法则在类的设计上的体现:
优先考虑将一个类设置成不变类
尽量降低一个类的访问权限
谨慎使用Serializable
尽量降低成员的访问权限
限制局域变量的有效范围