Happiness is more than pleasure without pain

你只有非常努力,才能看起来毫不费力

导航

设计模式相关

什么是高内聚 低耦合  

低耦合和高内聚是我们所追求的,低耦合是指一个程序中各个模块之间的联系少和相互依赖程度低,一个模块实现具体实现一个功能,各个类之间联系越少,相互依赖程度越低、共用或者传输的参数越少,则它们之间的耦合度越低,这样如果改动了一个类中一部分内容,就不需用改动其它类的内容或者只需要改动很少的一部分。便于程序的修改和升级。

高类聚是指一个模块内部各个元素之间关系紧密,争取用最少的元素和方法实现相应的功能。

 

 

我们常说“危难时刻见真情”,我们把这句话移植到技术上就成了“变更才显真功夫”,业务需求变更永无休止,技术前进就永无止境,在发生变更时才能发觉我们的设计或程序是否是松耦合。

 

依赖倒置原则的定义

     依赖倒置原则(Dependence Inversion Principle,简称DIP)这个名字看着有点别扭,“依赖”还“倒置”,这到底是什么意思?依赖倒置原则的原始定义是:High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions。翻译过来,包含三层含义:

  • 高层模块不应该依赖低层模块,两者都应该依赖其抽象;
  • 抽象不应该依赖细节;
  • 细节应该依赖抽象。

     高层模块和低层模块容易理解,每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块,原子逻辑的再组装就是高层模块。那什么是抽象,什么又是细节呢?在Java语言中,抽象就是指接口或抽象类,两者都是不能直接被实例化的;细节就是实现类,实现接口或继承抽象类而产生的类就是细节,其特点就是可以直接被实例化,也就是可以加上一个关键字new产生一个对象。依赖倒置原则在Java语言中的表现就是:

  • 模块间的依赖是通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;
  • 接口或抽象类不依赖于实现类;
  • 实现类依赖接口或抽象类。

     更加精简的定义就是“面向接口编程”——OOD(Object-Oriented Design,面向对象设计)的精髓之一。

 

在业务场景中,我们贯彻“抽象不应该依赖细节”,也就是我们认为抽象(ICar接口)不依赖BMW和Benz两个实现类(细节),因此我们在高层次的模块中应用都是抽象

Client属于高层业务逻辑,它对低层模块的依赖都建立在抽象上

.

public class Client {

public static void main(String[] args) {

IDriver zhangSan = new Driver();

ICar benz = new Benz();

//ICar bmw = new BMW();

 

//张三开奔驰车

zhangSan.drive(benz);

//张三开宝马  
//zhangSan.drive(bmw);

}

}

zhangSan的显示类型是IDriver,是一个接口,是抽象的,非实体化的,在其后的所有操作中,zhangSan都是以IDriver类型进行操作,屏蔽了细节对抽象的影响。当然,张三如果要开宝马车,也很容易,我们只要修改业务场景类就可以

 

posted on 2014-11-24 18:35  believer  阅读(137)  评论(0编辑  收藏  举报