feat: 中介者模式

This commit is contained in:
Bunny 2025-02-04 18:44:20 +08:00
parent 1c8c2a958e
commit 12f5f6600c
3 changed files with 257 additions and 1 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -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
=>收信:邮局收到要寄的信
=>送信:拿出地址查询收件人地址是:在地球北边,送信
=>收信人看信:
我的消息
---------------分隔线---------------
=>收信:邮局收到要寄的信
=>送信:拿出地址查询收件人地址是:在地球北边,送信
=>收信人看信:
你的回信
---------------分隔线---------------
=>收信:邮局收到要寄的信
=>送信:拿出地址查询收件人地址是:在地球北边,送信
=>收信人看信:
哈哈哈哈哈哈哈哈哈
```
## 迭代器模式---行为型

View File

@ -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);
}
}
}