diff --git a/notes/设计模式.md b/notes/设计模式.md
index 43b0d79b..17505b60 100644
--- a/notes/设计模式.md
+++ b/notes/设计模式.md
@@ -1033,7 +1033,162 @@ public class Client {
### 意图
-使用中间人对象来封装对象之间的交互。中间人模式可以降低交互对象之间的耦合程度。
+集中相关对象之间复杂的沟通和控制方式。
+
+### 类图
+
+- Mediator:中介者,定义一个接口用于与各同事(Colleague)对象通信。
+- Colleague:同事,相关对象
+
+
+
+### 实现
+
+Alarm(闹钟)、CoffeePot(咖啡壶)、Calendar(日历)、Sprinkler(喷头)是一组相关的对象,在某个对象的事件产生时需要去操作其它对象,形成了下面这种依赖结构:
+
+
+
+使用中介者模式可以将复杂的依赖结构变成星形结构:
+
+
+
+```java
+public abstract class Colleague {
+ public abstract void onEvent(Mediator mediator);
+}
+```
+
+```java
+public class Alarm extends Colleague {
+
+ @Override
+ public void onEvent(Mediator mediator) {
+ mediator.doEvent("alarm");
+ }
+
+ public void doAlarm() {
+ System.out.println("doAlarm()");
+ }
+}
+```
+
+```java
+public class CoffeePot extends Colleague {
+ @Override
+ public void onEvent(Mediator mediator) {
+ mediator.doEvent("coffeePot");
+ }
+
+ public void doCoffeePot() {
+ System.out.println("doCoffeePot()");
+ }
+}
+```
+
+```java
+public class Calender extends Colleague {
+ @Override
+ public void onEvent(Mediator mediator) {
+ mediator.doEvent("calender");
+ }
+
+ public void doCalender() {
+ System.out.println("doCalender()");
+ }
+}
+```
+
+```java
+public class Sprinkler extends Colleague {
+ @Override
+ public void onEvent(Mediator mediator) {
+ mediator.doEvent("sprinkler");
+ }
+
+ public void doSprinkler() {
+ System.out.println("doSprinkler()");
+ }
+}
+```
+
+```java
+public abstract class Mediator {
+ public abstract void doEvent(String eventType);
+}
+```
+
+```java
+public class ConcreteMediator extends Mediator {
+ private Alarm alarm;
+ private CoffeePot coffeePot;
+ private Calender calender;
+ private Sprinkler sprinkler;
+
+ public ConcreteMediator(Alarm alarm, CoffeePot coffeePot, Calender calender, Sprinkler sprinkler) {
+ this.alarm = alarm;
+ this.coffeePot = coffeePot;
+ this.calender = calender;
+ this.sprinkler = sprinkler;
+ }
+
+ @Override
+ public void doEvent(String eventType) {
+ switch (eventType) {
+ case "alarm":
+ doAlarmEvent();
+ break;
+ case "coffeePot":
+ doCoffeePotEvent();
+ break;
+ case "calender":
+ doCalenderEvent();
+ break;
+ default:
+ doSprinklerEvent();
+ }
+ }
+
+ public void doAlarmEvent() {
+ alarm.doAlarm();
+ coffeePot.doCoffeePot();
+ calender.doCalender();
+ sprinkler.doSprinkler();
+ }
+
+ public void doCoffeePotEvent() {
+ // ...
+ }
+
+ public void doCalenderEvent() {
+ // ...
+ }
+
+ public void doSprinklerEvent() {
+ // ...
+ }
+}
+```
+
+```java
+public class Client {
+ public static void main(String[] args) {
+ Alarm alarm = new Alarm();
+ CoffeePot coffeePot = new CoffeePot();
+ Calender calender = new Calender();
+ Sprinkler sprinkler = new Sprinkler();
+ Mediator mediator = new ConcreteMediator(alarm, coffeePot, calender, sprinkler);
+ // 闹钟事件到达,调用中介者就可以操作相关对象
+ alarm.onEvent(mediator);
+ }
+}
+```
+
+```java
+doAlarm()
+doCoffeePot()
+doCalender()
+doSprinkler()
+```
### JDK
diff --git a/pics/5359cbf5-5a79-4874-9b17-f23c53c2cb80.jpg b/pics/5359cbf5-5a79-4874-9b17-f23c53c2cb80.jpg
new file mode 100644
index 00000000..a449f38c
Binary files /dev/null and b/pics/5359cbf5-5a79-4874-9b17-f23c53c2cb80.jpg differ
diff --git a/pics/82cfda3b-b53b-4c89-9fdb-26dd2db0cd02.jpg b/pics/82cfda3b-b53b-4c89-9fdb-26dd2db0cd02.jpg
new file mode 100644
index 00000000..2b510c43
Binary files /dev/null and b/pics/82cfda3b-b53b-4c89-9fdb-26dd2db0cd02.jpg differ
diff --git a/pics/d0afdd23-c9a5-4d1c-9b3d-404bff3bd0d1.png b/pics/d0afdd23-c9a5-4d1c-9b3d-404bff3bd0d1.png
new file mode 100644
index 00000000..58ff84fe
Binary files /dev/null and b/pics/d0afdd23-c9a5-4d1c-9b3d-404bff3bd0d1.png differ