对低耦合的理解

1.耦合度的概念

耦合度是对模块(类)间关联程度的度量,可以用"联系"作同义词,"独立性"作反义词。

2.耦合度分类(由高到低)

(1)内容耦合。当一个模块直接修改或操作另一个模块的数据,或者直接转入另一个模块时,就发生了内容耦合。此时,被修改的模块完全依赖于修改它的模块。类与类之间直接调用或继承关系都是属于这种耦合。

需完全避免内容耦合,重点在于不要在类内部直接操作另一个类的对象的数据成员,可以通过在操作类中增加一个函数接口向客户类提供服务来实现

(2)公共耦合。两个及两个以上的模块共同引用一个全局数据项就称为公共耦合。

(3)控制耦合。一个模块在界面上传递一个信号(如开关值、标志量等)控制另一个模块,接收信号的模块的动作根据信号值进行调整,称为控制耦合。

(4)标记耦合。模块间通过参数传递复杂的内部数据结构,称为标记耦合。此数据结构的变化将使相关的模块发生变化。

(5)数据耦合。模块间通过参数传递基本类型的数据,称为数据耦合。

(6)非直接耦合。模块间没有信息传递时,属于非直接耦合。

3.为什么要追求低耦合

了解什么是耦合及耦合的分类后,我想大家对为什么要降低耦合度已经有一定的认识,并且多数开发人员也大概尝尽了高耦合带来的苦头。道理很简单,耦合度很高的情况下,维护代码时修改一个地方会牵连到很多地方,如果修改时没有理清这些耦合关系,那么带来的后果可能会是灾难性的,特别是对于需求变化较多以及多人协作开发维护的项目,修改一个地方会引起本来已经运行稳定的模块错误,严重时会导致恶性循环,问题永远改不完,开发和测试都在各种问题之间奔波劳累,最后导致项目延期,用户满意度降低,成本也增加了,这对用户和开发商影响都是很恶劣的,各种风险也就不言而喻了。

4.理解低耦合后对写代码和看代码的意义

(1)理解为何类之间操作数据成员为何要通过接口而非直接赋值和访问(避免内容耦合)

(2)理解为何要少使用全局变量(避免公共耦合)

(3)理解设计模式的意义。(为了追求低耦合,通过提升代码复杂度换取模块易维护,易扩展)

 

最后谈一下代码复用:为了提高程序易维护,易扩展的特性,代码复用也是很关键的一个方面。最低等级的复用是代码拷贝,然后是函数的复用、对象的复用。

当重复代码存在于同一对象中时,也就是说一段代码在该对象中出现了两次以上的时候,我们应该把这段代码抽取为方法。

当重复代码不在同一对象中时,那就运用抽取类的手段将重复的部分抽取到一个工具类中,然后让其他类调用。

当重复代码不在同一对象中时,也可以将相同的部分抽取为父类,不同的部分还留在原来的类中,然后让其他类继承该父类。

你可能感兴趣的:(设计模式)