1. 单一职责原则
一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分。通俗的说,即一个类只负责一项职责。
优点
- 控制类的粒度大小、将对象解耦、提高其内聚性。
实现方式
单一职责原则是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,再封装到不同的类或模块中,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关重构经验。
2. 接口隔离原则
接口功能尽量独立,使用多个专用接口,而不使用一个总接口供所有依赖它的类去调用。
优点
- 将臃肿庞大的接口分解为多个粒度小的接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。
- 接口隔离提高了系统的内聚性,降低了系统的耦合性。
- 如果接口的粒度大小定义合理,能够保证系统的稳定性
- 能减少项目工程中的代码冗余。过大的大接口里面通常放置许多不用的方法,当实现这个接口的时候,被迫设计冗余的代码。
实现方式
接口尽量小,但是要有限度。一个接口只服务于一个子模块或业务逻辑。只提供调用者需要的方法,屏蔽不需要的方法。提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。
3. 开闭原则
这个原则有两个特性,一个是说“对于扩展是开放的”,另一个是说“对于更改是封闭的”。当应用的需求改变时,通过增加新代码进行的,而不是更改现有的代码。
优点
- 可以提高代码的可复用性:粒度越小,被复用的可能性就越大;在面向对象的程序设计中,根据原子和抽象编程可以提高代码的可复用性。
- 可以提高软件的可维护性:遵守开闭原则的软件,其稳定性高和延续性强,从而易于扩展和维护。
实现方式
通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类中。当应用的需求改变时,只需要根据需求重新派生一个实现类来扩展就可以了。
4. 里氏替换原则
所有引用基类(父类)的地方必须能透明地使用其子类的对象。通俗讲:子类可以扩展父类的功能,但不能改变父类原有的功能。
里氏替换原则是对开闭原则的基础,是对实现抽象化的具体步骤的规范。
优点
- 克服了继承中重写父类造成的可复用性变差的缺点。
- 类的扩展不会给已有的系统引入新的错误,降低了代码出错的可能性。
实现方式
子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。
如果通过重写父类的方法来完成新的功能,这样写起来虽然简单,但是整个继承体系的可复用性会比较差,特别是运用多态比较频繁时,程序运行出错的概率会非常大。
如果程序违背了里氏替换原则,则继承类的对象在基类出现的地方会出现运行错误。这时其修正方法是:取消原来的继承关系,重新设计它们之间的关系。
5. 依赖倒置原则
高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。
其核心思想是:要面向接口编程,依赖于抽象而不依赖于具体。写代码时用到具体类时,不与具体类交互,而与具体类的上层接口交互。
依赖倒置原则是实现开闭原则的重要手段之一,它降低了客户与实现模块之间的耦合。
优点
- 依赖倒置原则可以降低类间的耦合性。
- 依赖倒置原则可以提高系统的稳定性。
- 依赖倒置原则可以提高代码的可读性和可维护性。
实现方式
每个类尽量提供接口或抽象类,或者两者都具备。变量的声明类型尽量是接口或者是抽象类
任何类都不应该从具体类派生。
6. 迪米特法则
一个实体尽量少与其他实体发生相互作用。应尽量减少两个对象间调用,如果一个对象需要调用另一个对象方法,可以通过第三者转发,保证模块间独立性。
其目的是降低类之间的耦合度,提高模块的相对独立性。
但是,过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。所以,在釆用迪米特法则时需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰。
优点
- 降低了类之间的耦合度,提高了模块的相对独立性。
实现方式
在类的划分上,应该创建弱耦合的类。类与类之间的耦合越弱,就越有利于实现可复用的目标。
在类的结构设计上,尽量降低类成员的访问权限。
在类的设计上,优先考虑将一个类设置成不变类。
在对其他类的引用上,将引用其他对象的次数降到最低。
不暴露类的属性成员,而应该提供相应的访问器(set方法和get 方法)。
谨慎使用序列化(Serializable)功能。
7. 合成复用原则
尽量使用组合而非继承。将已有的对象纳入新对象中,作为新对象的成员对象使用达到复用。
优点
-类的复用分为继承复用和合成复用两种,继承复用虽然有简单和易实现的优点,但它也存在以下缺点:
1、继承复用破坏了类的封装性。因为继承会将父类的实现细节暴露给子类,父类对子类是透明的,所以这种复用又称为“白箱”复用。
2、子类与父类的耦合度高。父类的实现的任何改变都会导致子类的实现发生变化,这不利于类的扩展与维护。
采用组合或聚合复用时,可以将已有对象纳入新对象中,使之成为新对象的一部分,新对象可以调用已有对象的功能,它有以下优点:
1、它维持了类的封装性。因为成分对象的内部细节是新对象看不见的,所以这种复用又称为“黑箱”复用。
2、新旧类之间的耦合度低。这种复用所需的依赖较少,新对象存取成分对象的唯一方法是通过成分对象的接口。
3、复用的灵活性高。这种复用可以在运行时动态进行,新对象可以动态地引用与成分对象类型相同的对象。
实现方式
合成复用原则是通过将已有的对象纳入新对象中,作为新对象的成员对象来实现的,新对象可以调用已有对象的功能,从而达到复用。
8. 小结:
开闭原则,里氏替换原则,依赖倒转原则会同时出现,开闭原则是目标,里氏替换原则是基础,依赖倒转是手段。
492

被折叠的 条评论
为什么被折叠?



