设计模式之迪米特法则

定义

1
2
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。
如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

代码解释

1
2
3
Developer:代表开发人员。
TeamLeader:代表团队领导,他不直接与开发人员沟通,而是将任务委托给IT部门经理。
ITManager:代表IT部门经理,他直接与开发人员沟通并分配任务。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// 员工类
class Developer {
private String name;

public Developer(String name) {
this.name = name;
}

public void workOnTask(String task) {
System.out.println(name + " is working on: " + task);
}
}

// 团队领导类
class TeamLeader {
private ITManager manager;

public TeamLeader(ITManager manager) {
this.manager = manager;
}

public void assignTaskToTeam(String task) {
manager.assignTask(task);
}
}

// IT部门经理类
class ITManager {
private List<Developer> developers;

public ITManager() {
this.developers = new ArrayList<>();
}

public void addDeveloper(Developer developer) {
developers.add(developer);
}

public void assignTask(String task) {
for (Developer developer : developers) {
developer.workOnTask(task);
}
}
}

// 主类
public class DemeterPrincipleExample {
public static void main(String[] args) {
// 创建开发人员
Developer dev1 = new Developer("Alice");
Developer dev2 = new Developer("Bob");

// 创建IT部门经理并添加开发人员
ITManager manager = new ITManager();
manager.addDeveloper(dev1);
manager.addDeveloper(dev2);

// 创建团队领导并将任务交给IT部门经理处理
TeamLeader teamLeader = new TeamLeader(manager);
teamLeader.assignTaskToTeam("Develop new feature");
}
}