迪米特法则(LoD)

   迪米特法则(Law of Demeter, LoD):一个对象应该对其他对象保持最少的了解,又叫最少知道原则。

   迪米特法则要求我们在设计系统时,应该尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,如果其中的一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用。简言之,就是通过引入一个合理的第三者来降低现有对象之间的耦合度。

   迪米特法则强调不要和“陌生人”说话、只与你的直接朋友通信,在迪米特法则中,对于一个对象,其朋友包括以下几类:

  • 当前对象本身(this);

  • 以参数形式传入到当前对象方法中的对象;

  • 当前对象的成员对象;

  • 如果当前对象的成员对象是一个集合,那么集合中的元素也都是朋友;

  • 当前对象所创建的对象。

Golang Demo

package demeter

type Member struct {
}

func NewMember() *Member {
    return &Member{}
}
import (
    "container/list"
    "fmt"
)

type TeamLeader struct {
}

func NewTeamLeader() *TeamLeader {
    return &TeamLeader{}
}

func (TeamLeader) checkNumberOfMember() {
    l := list.New()
    l.Init()
    for i := 0; i < 20; i++ {
        l.PushBack(NewMember())
    }
    fmt.Println(l.Len())
}

Java Demo

UML

这里的类结构关系比较简单,就不上图了。

补充另一个版本的Java/Scala Demo 以及源码解析

Java Demo_

Scala Demo

UML_

源码解析

Last updated