设计模式原则

内聚与耦合

耦合:

也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。

模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息内聚性:又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。

若一个模块内各元素(语句之间、程序段之间)联系的越紧密,则它的内聚性就越高。

内聚

故名思议,表示内部间聚集、关联的程度,那么高内聚就是指要高度的聚集和关联。高内聚是指类与类之间的关系而定,高,意思是他们之间的关系要简单,
明了,不要有很强的关系,不然,运行起来就会出问题。一个类的运行影响到其他的类。由于高内聚具备可靠性,可重用性,可读性等优点,模块设计推荐采用高内聚。
内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系。

一、单一职责原则

类的职责要单一,控制类的粒度大小,不能将太多的职责放在一个类中。单一职责原则是实现高内聚、低耦合的指导方针,设计人员需要发现类的不同职责并将其分离。

优点:

 1.可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;

 2. 提高类的可读性,提高系统的可维护性;

 3.变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。

二、开闭原则

一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。为了满足开闭原则,需要对系统进行抽象化设计,

抽象化是开闭原则的关键。为系统定义一个相对稳定的抽象层,而将不同的实现行为移至具体的实现层中完成。如果需要修改系统的行为,无须对抽象层进行任何改动,

只需要增加新的具体类来实现新的业务功能即可,实现在不修改已有代码的基础上扩展系统的功能,达到开闭原则的要求。

开闭原则是最基础的设计原则,下面的五个设计原则都是开闭原则的具体形态.

优点

    1.提高复用性,抽象类粒度小,可复用性高,

    2.提高维护性,不需要关注抽象类维护,只负责实例扩展。

    3.面向对象开发的要求,设计之初考虑尽可能多的变化,留下接口,等待“可能”转变为实现

三、里氏代换原则

任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,

而派生类也能够在基类的基础上增加新的行为。在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。

四、依赖倒转原则

针对接口编程,依赖于抽象而不依赖于具体。高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。

代码要依赖于抽象的类,而不要依赖于具体的类;要针对接口或抽象类编程,而不是针对具体类编程

五、接口隔离原则

使用多个隔离的接口,比使用单个接口要好。降低类之间的耦合度。不应该依赖那些它不需要的接口。用多个专门的接口,而不使用单一的总接口。

每一个接口应该承担一种相对独立的角色,不多不少,不干不该干的事,该干的事都要干。

六、合成复用原则

尽量使用合成/聚合的方式,尽量使用对象组合,而不是使用继承。一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,

使之成为新对象的一部分;新对象通过委派调用已有对象的方法达到复用其已有功能的目的

七、迪米特法原则(最少知道原则

一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。当一个模块修改时,就会尽量少的影响其他的模块,扩展会相对容易。

原文地址:https://www.cnblogs.com/socks/p/13437242.html