feat: 中介者模式
This commit is contained in:
parent
1c8c2a958e
commit
12f5f6600c
Binary file not shown.
After Width: | Height: | Size: 25 KiB |
|
@ -2328,7 +2328,145 @@ public class Memo {
|
|||
|
||||
## 中介者模式---行为型
|
||||
|
||||
---
|
||||
![image-20250204184241160](./images/设计模式-v2/image-20250204184241160.png)
|
||||
|
||||
需要角色:抽象中介者、具体中介者、抽象同事类、具体同事类
|
||||
|
||||
### 简单示例
|
||||
|
||||
#### 代码示例
|
||||
|
||||
```java
|
||||
public class Behavior {
|
||||
public static void main(String[] args) {
|
||||
// 创建邮局
|
||||
PostOfficeImpl postOffice = new PostOfficeImpl();
|
||||
|
||||
// 创建收信人和接收人
|
||||
Me me = new Me(postOffice, "在地球南边");
|
||||
You you = new You(postOffice, "在地球北边");
|
||||
|
||||
// 到邮局建立联系
|
||||
postOffice.addPeople(me);
|
||||
postOffice.addPeople(you);
|
||||
|
||||
// 我:
|
||||
me.sendLetter("我的消息", "You");
|
||||
System.out.println("---------------分隔线---------------");
|
||||
|
||||
// 你:
|
||||
you.sendLetter("你的回信", "You");
|
||||
System.out.println("---------------分隔线---------------");
|
||||
|
||||
// 我:
|
||||
me.sendLetter("哈哈哈哈哈哈哈哈哈", "You");
|
||||
}
|
||||
|
||||
// 抽象中介者
|
||||
interface PostOffice {
|
||||
|
||||
/**
|
||||
* 送信
|
||||
*/
|
||||
void deliverLetter(String letter, String receiver);
|
||||
|
||||
/**
|
||||
* 添加人
|
||||
*/
|
||||
void addPeople(People people);
|
||||
}
|
||||
|
||||
@Data
|
||||
static class PostOfficeImpl implements PostOffice {
|
||||
private final Map<String, People> peopleMap = new HashMap<>();
|
||||
|
||||
/**
|
||||
* 送信
|
||||
*/
|
||||
@Override
|
||||
public void deliverLetter(String letter, String receiver) {
|
||||
System.out.println("=>收信:邮局收到要寄的信");
|
||||
|
||||
People people = peopleMap.get(receiver);
|
||||
|
||||
System.out.println("=>送信:拿出地址查询收件人地址是:" + people.getAddress() + ",送信");
|
||||
System.out.println("=>收信人看信:");
|
||||
|
||||
people.receiveLetter(letter);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加人
|
||||
*/
|
||||
@Override
|
||||
public void addPeople(People people) {
|
||||
peopleMap.put(people.getClass().getSimpleName(), people);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Getter
|
||||
static class People {
|
||||
private final String address;
|
||||
protected PostOffice postOffice;
|
||||
|
||||
public People(PostOffice postOffice, String address) {
|
||||
this.postOffice = postOffice;
|
||||
this.address = address;
|
||||
}
|
||||
|
||||
/**
|
||||
* 收到信
|
||||
*
|
||||
* @param letter 信的内容
|
||||
*/
|
||||
public void receiveLetter(String letter) {
|
||||
System.out.println(letter);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送信
|
||||
*
|
||||
* @param letter 信内容
|
||||
* @param receiver 收件人
|
||||
*/
|
||||
public void sendLetter(String letter, String receiver) {
|
||||
postOffice.deliverLetter(letter, receiver);
|
||||
}
|
||||
}
|
||||
|
||||
static class Me extends People {
|
||||
public Me(PostOffice postOffice, String address) {
|
||||
super(postOffice, address);
|
||||
}
|
||||
}
|
||||
|
||||
static class You extends People {
|
||||
public You(PostOffice postOffice, String address) {
|
||||
super(postOffice, address);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 运行结果:
|
||||
|
||||
```java
|
||||
=>收信:邮局收到要寄的信
|
||||
=>送信:拿出地址查询收件人地址是:在地球北边,送信
|
||||
=>收信人看信:
|
||||
我的消息
|
||||
---------------分隔线---------------
|
||||
=>收信:邮局收到要寄的信
|
||||
=>送信:拿出地址查询收件人地址是:在地球北边,送信
|
||||
=>收信人看信:
|
||||
你的回信
|
||||
---------------分隔线---------------
|
||||
=>收信:邮局收到要寄的信
|
||||
=>送信:拿出地址查询收件人地址是:在地球北边,送信
|
||||
=>收信人看信:
|
||||
哈哈哈哈哈哈哈哈哈
|
||||
```
|
||||
|
||||
## 迭代器模式---行为型
|
||||
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
package cn.bunny.pattern16;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class Behavior {
|
||||
public static void main(String[] args) {
|
||||
// 创建邮局
|
||||
PostOfficeImpl postOffice = new PostOfficeImpl();
|
||||
|
||||
// 创建收信人和接收人
|
||||
Me me = new Me(postOffice, "在地球南边");
|
||||
You you = new You(postOffice, "在地球北边");
|
||||
|
||||
// 到邮局建立联系
|
||||
postOffice.addPeople(me);
|
||||
postOffice.addPeople(you);
|
||||
|
||||
// 我:
|
||||
me.sendLetter("我的消息", "You");
|
||||
System.out.println("---------------分隔线---------------");
|
||||
|
||||
// 你:
|
||||
you.sendLetter("你的回信", "You");
|
||||
System.out.println("---------------分隔线---------------");
|
||||
|
||||
// 我:
|
||||
me.sendLetter("哈哈哈哈哈哈哈哈哈", "You");
|
||||
}
|
||||
|
||||
// 抽象中介者
|
||||
interface PostOffice {
|
||||
|
||||
/**
|
||||
* 送信
|
||||
*/
|
||||
void deliverLetter(String letter, String receiver);
|
||||
|
||||
/**
|
||||
* 添加人
|
||||
*/
|
||||
void addPeople(People people);
|
||||
}
|
||||
|
||||
@Data
|
||||
static class PostOfficeImpl implements PostOffice {
|
||||
private final Map<String, People> peopleMap = new HashMap<>();
|
||||
|
||||
/**
|
||||
* 送信
|
||||
*/
|
||||
@Override
|
||||
public void deliverLetter(String letter, String receiver) {
|
||||
System.out.println("=>收信:邮局收到要寄的信");
|
||||
|
||||
People people = peopleMap.get(receiver);
|
||||
|
||||
System.out.println("=>送信:拿出地址查询收件人地址是:" + people.getAddress() + ",送信");
|
||||
System.out.println("=>收信人看信:");
|
||||
|
||||
people.receiveLetter(letter);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加人
|
||||
*/
|
||||
@Override
|
||||
public void addPeople(People people) {
|
||||
peopleMap.put(people.getClass().getSimpleName(), people);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Getter
|
||||
static class People {
|
||||
private final String address;
|
||||
protected PostOffice postOffice;
|
||||
|
||||
public People(PostOffice postOffice, String address) {
|
||||
this.postOffice = postOffice;
|
||||
this.address = address;
|
||||
}
|
||||
|
||||
/**
|
||||
* 收到信
|
||||
*
|
||||
* @param letter 信的内容
|
||||
*/
|
||||
public void receiveLetter(String letter) {
|
||||
System.out.println(letter);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送信
|
||||
*
|
||||
* @param letter 信内容
|
||||
* @param receiver 收件人
|
||||
*/
|
||||
public void sendLetter(String letter, String receiver) {
|
||||
postOffice.deliverLetter(letter, receiver);
|
||||
}
|
||||
}
|
||||
|
||||
static class Me extends People {
|
||||
public Me(PostOffice postOffice, String address) {
|
||||
super(postOffice, address);
|
||||
}
|
||||
}
|
||||
|
||||
static class You extends People {
|
||||
public You(PostOffice postOffice, String address) {
|
||||
super(postOffice, address);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue