当前位置: 首页 > news >正文

设计模式之中介者模式

1.中介者模式概念

        定义了一个对象来封装一系列其他对象之间的交互,从而降低这些对象间的耦合度。这种模式使得各个对象不需要显式地相互引用,而是通过一个中介者对象来进行通信。

2.中介者模式组成

1)抽象中介者(Mediator)

        抽象中介者是一个接口或抽象类,定义了中介者的基本行为。如注册,接受消息,转发消息

2)具体中介者(Concrete Mediator)

        具体中介者实现了抽象中介者接口中的方法,协调各个同事对象之间的交互。

3)抽象同事类(Colleague)

        抽象同事类是一个接口或抽象类,定义了同事对象的基本行为。如发送消息,接受消息

4)具体同事类(ConcreteColleague)

        具体同事类实现了抽象同事类中的方法,负责具体的业务逻辑。

3.举个栗子

        小久和惜己在外地一起工作,正好自己的朋友惜己要回到自己家乡办事,然后拜托惜己给父母捎点这里的土特产,父母收到土特产。

如下图

        父母收到小久的土特产很高兴,拜托惜己给小久带了妈妈的毛衣,惜己办完事回去,小久收到妈妈亲手制作的毛衣。

4.代码实现

1)同事抽象类

package org.xiji.mediator;/*** 同事抽象类*/
public interface Colleague {/*** 发送消息*/void send(String msg, SendAndReceiveContain sendAndReceiveContain);/*** 接受消息*/void receive(String msg, SendAndReceiveContain sendAndReceiveContain);
}

2)中介抽象类

package org.xiji.mediator;/*** 中介者接口*/
public interface Mediator {/*** 注册*/void register(User user);/*** 转发消息*/void sendMessage(String msg, SendAndReceiveContain sendAndReceiveContain);
}

3)接受发送容器类

package org.xiji.mediator;/*** 接受者,发送者容器*/
public class SendAndReceiveContain {/*** 接收者*/public User receiver;/**** 发送者*/public User send;public SendAndReceiveContain(User receiver, User send) {this.receiver = receiver;this.send = send;}}

4)同事抽象实现类

package org.xiji.mediator;public class User implements Colleague{String name;/*** 中介者*/Mediator mediator;public User(Mediator mediator,String name){this.mediator = mediator;this.name =name;mediator.register(this);}//注册信息/*** 发送消息*/@Overridepublic void send(String msg, SendAndReceiveContain sendAndReceiveContain) {System.out.println(this.name+"发送消息:" +msg+"to"+sendAndReceiveContain.receiver.name);mediator.sendMessage(msg,sendAndReceiveContain);}/*** 接受消息*/@Overridepublic void receive(String msg, SendAndReceiveContain sendAndReceiveContain) {System.out.println(this.name+"收到消息:" +msg+"\n发送者:"+sendAndReceiveContain.send.name);}}

5)中介抽象实现类

package org.xiji.mediator;import java.util.ArrayList;
import java.util.List;public class MediatorImpl implements Mediator{/*** 定义集合,用于存储所有的同事对象*/List<User> users = new ArrayList<>();/***添加用户*/@Overridepublic void register(User user) {users.add(user);}/*** 转发信息*/@Overridepublic void sendMessage(String msg, SendAndReceiveContain sendAndReceiveContain) {for (User user : users) {if (user.name.equals(sendAndReceiveContain.receiver.name)) {//转发信息System.out.println("惜己"+"把"+sendAndReceiveContain.send.name+msg+"带给"+sendAndReceiveContain.receiver.name);user.receive(msg,sendAndReceiveContain);}}}
}

6)测试代码实现类

package org.xiji.mediator;import java.util.Scanner;/*** 中介者模式测试类*/
public class MediatorMain {public static void main(String[] args) {//中介者Mediator 惜己 = new MediatorImpl();//容器User 小久 = new User(惜己,"小久");//小久父母User 父母 = new User(惜己,"小久父母");//小久===》父母SendAndReceiveContain sendAndReceiveContain = new SendAndReceiveContain(父母, 小久);//父母===》小久SendAndReceiveContain sendAndReceiveContain1 = new SendAndReceiveContain(小久, 父母);Scanner scanner = new Scanner(System.in);System.out.println("=====================================");while (true) {System.out.println("发送东西");String msg = scanner.next();小久.send(msg,sendAndReceiveContain);System.out.println("=====================================");System.out.println("父母让惜己帮自己给小久带点东西");String msg2 = scanner.next();父母.send(msg2,sendAndReceiveContain1);}}
}

7)运行结果

小久==>土特产==>惜己==>小久父母+土特产

父母==》妈妈的毛衣===》惜己===》小久+妈妈的毛衣


http://www.mrgr.cn/news/16953.html

相关文章:

  • 常用排序算法(上)
  • 0901python打印异常信息
  • iOS面试:在block内如何修改block外部变量?
  • 火绒安全与国际对手:全面对比与分析
  • PCL 基于八叉树的曲率下采样
  • asio之带缓冲区的流
  • OpenIPC开源IPC之重要源码包
  • 常使用的前端构建优化策略
  • 2024年Linux内核社区关于large folio的关键进展
  • PCL-直通滤波
  • 617. 合并二叉树
  • 【AI 绘画】更快?更省显存?支持 FLUX?使用绘世启动器安装 SD WebUI Forge
  • 【王树森】Few-Shot Learning小样本学习 (1/3): 基本概念(个人向笔记)
  • AutoGen 检索增强生成(RAG)功能解析
  • 拥抱开源拥护国产|暴雨打造最强AI的服务器操作系统!
  • 前端进阶| 深入学习面向对象设计原则
  • Oracle(98)如何启用审计?
  • 结构化数据、半结构化数据、非结构化数据
  • 30Kg载重1小时长续航油电混动无人机技术详解
  • 部署project_exam_system项目——及容器的编排