别和陌生人说话-得墨忒耳律

定义

得墨忒耳律(The Law of Demeter)又称最少知识原则,是一条与面向对象语言有关的软件设计原则。

该定律表明,软件的一个单元应该只与其直接合作者交谈。比如对象 A 引用了对象 B,对象 B 引用了对象 C,则 A 可以直接调用 B 的方法,但不应直接调用 C 的方法。所以如果 C 有一个 dothing() 的方法,不应该使用A.getB().getC().dothing(),而是使用 B.getC().dothing()。

详解

得墨忒耳定律认为,如果类C中有一个方法f,f不应该调用任何函数返回的对象的方法,它只能够调用以下对象的方法:

  • C中的方法

  • 作为参数传递给f的对象中的方法

  • 方法f中创建对象含有的方法

举例:

class C {
define f1(){
    # return option
    return A.get_B()
}

define f(A a){
    define sub_f(){
        #do something in sub_f
    }
    b = f1()    # 由于f1是C中创建的方法,可以调用
    a.get_options()       #由于get_options是a中的方法,可以调用
    sub_f()  # 由于sub_f是f创造的房方法,可以调用
    b.get_C()   # 不建议调用,方法不应该了解它操作对象的内部情形
    
}
}

为什么要遵循这个规则?

  • 我们可以更改一个类,而无需因连锁反应再去改许多其他的(类)。
  • 我们可以改变调用的方法,而无需改变其他任何东西。
  • 遵从LOD,让测试更容易被构建。我们不必为了模拟而写很多的’when’和各种return。
  • 提高了封装和抽象(下文将举例说明)。
  • 基本上,我们隐藏了“xx是如何工作的”。
  • 让代码更少的耦合。主叫方法只耦合一个对象,而并非所有的内部依赖。
  • 它通常会更好地模拟现实世界。假设我在便利店购物。付款时,我应该直接将钱递给她,而不是将钱包交给收银员,让她打开并取出钱

你可能感兴趣的:(别和陌生人说话-得墨忒耳律)