From 12f5f6600c4823e175318b870b3cff81c3935c1a Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Tue, 4 Feb 2025 18:44:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=AD=E4=BB=8B=E8=80=85=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../设计模式-v2/image-20250204184241160.png | Bin 0 -> 25677 bytes README/设计模式-v2.md | 140 +++++++++++++++++- .../java/cn/bunny/pattern16/Behavior.java | 118 +++++++++++++++ 3 files changed, 257 insertions(+), 1 deletion(-) create mode 100644 README/images/设计模式-v2/image-20250204184241160.png create mode 100644 pattern/src/main/java/cn/bunny/pattern16/Behavior.java diff --git a/README/images/设计模式-v2/image-20250204184241160.png b/README/images/设计模式-v2/image-20250204184241160.png new file mode 100644 index 0000000000000000000000000000000000000000..39ad246b1623d4e3e656bdbb5e3b1ee9f93ba85f GIT binary patch literal 25677 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 literal 0 HcmV?d00001 diff --git a/README/设计模式-v2.md b/README/设计模式-v2.md index 5fe51fa..0b96b32 100644 --- a/README/设计模式-v2.md +++ b/README/设计模式-v2.md @@ -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 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 +=>收信:邮局收到要寄的信 +=>送信:拿出地址查询收件人地址是:在地球北边,送信 +=>收信人看信: +我的消息 +---------------分隔线--------------- +=>收信:邮局收到要寄的信 +=>送信:拿出地址查询收件人地址是:在地球北边,送信 +=>收信人看信: +你的回信 +---------------分隔线--------------- +=>收信:邮局收到要寄的信 +=>送信:拿出地址查询收件人地址是:在地球北边,送信 +=>收信人看信: +哈哈哈哈哈哈哈哈哈 +``` ## 迭代器模式---行为型 diff --git a/pattern/src/main/java/cn/bunny/pattern16/Behavior.java b/pattern/src/main/java/cn/bunny/pattern16/Behavior.java new file mode 100644 index 0000000..b3d892e --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern16/Behavior.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 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); + } + } +}