Java设计模式(七)依赖倒转原则与迪米特法则

一、引言

  
       今天我们先介绍两个面向对象的程序设计中十分重要的两个设计原则:依赖倒转原则和迪米特法则。
  

二、依赖倒转原则


       所谓的依赖倒转原则是指:代码中的高层模块不应该依赖底层模块,两个都应该依赖抽象。抽象不应该依赖细节,细节应该依赖于抽象。

       在面向过程的开发过程中,我们通常把诸如访问数据库等常用操作的代码写成许多底层的函数库,在做项目时,直接调用这些底层函数就可以了,这就是高层模块依赖底层模块。这种编程思想的问题是,在做一个新的项目时,虽然业务逻辑的高层模块都是一样的,但是由于客户使用了不同的数据库,相应的访问数据库的底层函数库也不一样(函数名、调用方式等都不可能一样)。这样,之前实现的高层模块就不能复用了。

       依赖倒转原则就是为了解决这个问题而提出的。同样是上面的例子,按照依赖倒转原则的要求,我们先定义访问数据库的标准抽象类和接口。在实现访问数据库的底层模块时,不管访问那种数据库,都要按照这些标准抽象类和接口去实现。而在具体项目的高层模块实现中,所面向的也是标准抽象类和接口,而不是具体访问数据库的底层函数库。这样,无论是高层还是底层模块都可以很容易的被复用。

       应用依赖倒转原则的更好例子就是计算机。大家知道计算机主板上有各种各样的元件接口,包括CPU、硬盘、内存等,这些接口都是IEEE的标准接口,任何品牌、任何型号的CPU、内存和硬盘都要按照这些标准接口进行生产,而计算机操作系统在实现访问CPU、内存和硬盘的代码的时候也必须按照这些标准接口去实现,而不是针对每个品牌的硬件去实现。正因为这样,一台电脑就可以随意的更换硬件模块,也可以随意更换操作系统,这很好的体现了依赖倒转原则的特点。

       总得来说,依赖倒转原则降低了高层模块和底层模块之间的耦合,增强了代码的可复用性和可修改性


三、迪米特法则

  
        迪米特法则是指:如果两个类没有必要建立直接的通信,那么两个类就不应当发生直接的相互作用。如果一个类要调用另一个类的某一个方法,可以通过第三方转发这个调用

       理解迪米特法则可以考虑饭店吃饭的例子。我们去饭店吃饭,目的就是吃到烹饪好的饭菜,而不是亲手去做菜,这样我们就没有必要与后厨中的油盐酱醋和各种各样的食材建立通信,而是通过饭店的厨师完成烹饪,这就满足了迪米特法则。

       迪米特法则的优势是显而易见的,那就是顾客不需要了解各种食材的特性,佐料的添加、烹饪的火候和烹饪的方法这些后厨的细节,只需要通过厨师就可以吃到想要的饭菜。这实际上体现出迪米特法则降低类成员的访问权限降低类之间的耦合程度的特点,类之间的耦合越弱,就越有利于复用。

猜你喜欢

转载自blog.csdn.net/u013916933/article/details/51689496