auto commit
This commit is contained in:
parent
8f59fff5ad
commit
9000ddedb0
157
notes/设计模式.md
157
notes/设计模式.md
@ -1033,7 +1033,162 @@ public class Client {
|
|||||||
|
|
||||||
### 意图
|
### 意图
|
||||||
|
|
||||||
使用中间人对象来封装对象之间的交互。中间人模式可以降低交互对象之间的耦合程度。
|
集中相关对象之间复杂的沟通和控制方式。
|
||||||
|
|
||||||
|
### 类图
|
||||||
|
|
||||||
|
- Mediator:中介者,定义一个接口用于与各同事(Colleague)对象通信。
|
||||||
|
- Colleague:同事,相关对象
|
||||||
|
|
||||||
|
<div align="center"> <img src="../pics//d0afdd23-c9a5-4d1c-9b3d-404bff3bd0d1.png"/> </div><br>
|
||||||
|
|
||||||
|
### 实现
|
||||||
|
|
||||||
|
Alarm(闹钟)、CoffeePot(咖啡壶)、Calendar(日历)、Sprinkler(喷头)是一组相关的对象,在某个对象的事件产生时需要去操作其它对象,形成了下面这种依赖结构:
|
||||||
|
|
||||||
|
<div align="center"> <img src="../pics//82cfda3b-b53b-4c89-9fdb-26dd2db0cd02.jpg"/> </div><br>
|
||||||
|
|
||||||
|
使用中介者模式可以将复杂的依赖结构变成星形结构:
|
||||||
|
|
||||||
|
<div align="center"> <img src="../pics//5359cbf5-5a79-4874-9b17-f23c53c2cb80.jpg"/> </div><br>
|
||||||
|
|
||||||
|
```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
|
### JDK
|
||||||
|
|
||||||
|
BIN
pics/5359cbf5-5a79-4874-9b17-f23c53c2cb80.jpg
Normal file
BIN
pics/5359cbf5-5a79-4874-9b17-f23c53c2cb80.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
BIN
pics/82cfda3b-b53b-4c89-9fdb-26dd2db0cd02.jpg
Normal file
BIN
pics/82cfda3b-b53b-4c89-9fdb-26dd2db0cd02.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
BIN
pics/d0afdd23-c9a5-4d1c-9b3d-404bff3bd0d1.png
Normal file
BIN
pics/d0afdd23-c9a5-4d1c-9b3d-404bff3bd0d1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 12 KiB |
Loading…
x
Reference in New Issue
Block a user