软件设计原则
一、开闭原则(Open Closed Principle,OCP):当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。
二、里氏替换原则(Liskov Substitution Principle LSP):子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。
三、依赖倒置原则(Dependency Inverse Principle DIP):高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象,其核心思想要面向接口编程,不要面向实现编程。
(1)每个类尽量提供接口或抽象类,或者两者都具备。
(2)变量的声明类型尽量是接口或者是抽象类。
(3)任何类都不应该从具体类派生。
(4)使用继承时尽量遵循里氏替换原则。
四、单一职责原则(Single Responsibility Principle,SRP):发现类的不同职责并将其分离,再封装到不同的类或模块中。
五、接口隔离原则(Interface Segregation Principle,ISP):尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。
六、迪米特法则(Law of Demeter,LoD):如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。
(1)在类的划分上,应该创建弱耦合的类。类与类之间的耦合越弱,就越有利于实现可复用的目标。。
(2)在类的结构设计上,尽量降低类成员的访问权限。
(3)在类的设计上,优先考虑将一个类设置成不变类。
(4)在对其他类的引用上,将引用其他对象的次数降到最低。
(5)不暴露类的属性成员,而应该提供相应的访问器(set 和 get 方法)。
(6)谨慎使用序列化(Serializable)功能。
七、合成复用原则(Composite Reuse Principle,CRP):如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。
这 7 种设计原则是软件设计模式必须尽量遵循的原则,各种原则要求的侧重点不同。其中,开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;单一职责原则告诉我们实现类要职责单一;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合度;合成复用原则告诉我们要优先使用组合或者聚合关系复用,少用继承关系复用。