所有元素包括类都是统一由个类进行控制、生成、维护、改变状态的,这个类就是中介者

我们看下图没有使用中介者的情况

★中介者模式★_测试类

 

 

我们称上图的状态为“互为信息源”,相互之间都能进行通信,这样造成的后果就是增加了代码的耦合性,并且不易于维护

我们可以使用一个中介者进行左右逢源,所有的其他类都是通过中介者来进行互相通信的

 

★中介者模式★_中介者_02

 

 

比如我们进行了一次考试,考试成绩决定着你的水平,角色分别是小明,小红,小刚。

 1   <script>
 2     // 测试类,是中介者类,作用就是承接成绩和状态,然后返回已有的消息
 3 function Test(name) {
 4     this.name = name;
 5     this.score = new Score(this.name);
 6     this.state = new State(this.score.result);
 7 }
 8 Test.prototype.cnnouncedResult = function() {
 9     console.log(this.name + "的考试成绩是" + this.score.result + "分,水平是" + this.state.result)
10 }
11 
12 // 成绩类,返回的是对应的成绩信息
13 function Score(name) {
14     switch (name) {
15         case "小明":
16             this.result = 60;
17             break;
18         case "小红":
19             this.result = 90;
20             break;
21         case "小刚":
22             this.result = 80;
23             break;
24     }
25 }
26 function State(score) {
27     // 当前的考试结果返回对应的状态,如果是60分则返回及格,80分是良好,90分以上是优秀
28     if (score >= 60 && score < 80) {
29         this.result = "及格"
30     } else if (score >= 80 && score < 90) {
31         this.result = "良好"
32     } else if (score >= 90) {
33         this.result = "优秀"
34     } else {
35         this.result = "不及格"
36     }
37 }
38 var xiaoming = new Test("小明")
39 var xiaohong = new Test("小红")
40 var xiaogang = new Test("小刚")
41 xiaoming.cnnouncedResult()
42 xiaohong.cnnouncedResult()
43 xiaogang.cnnouncedResult()
44     </script>

★中介者模式★_测试类_03