28 行为型模式-中介者模式

news2024/11/16 21:00:58
1 中介者模式介绍

在这里插入图片描述
在这里插入图片描述

2 中介者模式原理

在这里插入图片描述
在这里插入图片描述

3 中介者模式实现
/**
 * 抽象中介者
 **/
public interface Mediator {

    //处理同事对象注册与转发同事对象信息的方法
    void apply(String key);
}
/**
 * 具体中介者
 **/
public class MediatorImpl implements Mediator {

    @Override
    public void apply(String key) {
        System.out.println("最终中介者执行的操作,key为" + key);
    }
}
/**
 * 抽象同事类
 **/
public abstract class Colleague {

    private Mediator mediator;

    public Colleague(Mediator mediator) {
        this.mediator = mediator;
    }

    public Mediator getMediator() {
        return mediator;
    }

    //同事间进行交互的抽象方法
    public abstract void exec(String key);
}
/**
 * 具体同事类
 **/
public class ConcreteColleagueA extends Colleague{
    public ConcreteColleagueA(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void exec(String key) {
        System.out.println("=====在A同事中,通过中介者执行!");
        getMediator().apply(key);
    }
}
/**
 * 具体同事类
 **/
public class ConcreteColleagueB extends Colleague{
    public ConcreteColleagueB(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void exec(String key) {
        System.out.println("=====在B同事中,通过中介者执行!");
        getMediator().apply(key);
    }
}
public class Client {

    public static void main(String[] args) {

        //创建中介者
        Mediator mediator = new MediatorImpl();

        //创建同事对象
        Colleague c1 = new ConcreteColleagueA(mediator);
        c1.exec("key-A");

        Colleague c2 = new ConcreteColleagueB(mediator);
        c2.exec("key-B");
    }
}
4 中介者模式应用实例

【例】租房

/**
 * 抽象中介者
 **/
public abstract class Mediator {

    //创建联络方法
    public abstract void contact(String message, Person person);
}
/**
 * 抽象同事类
 **/
public abstract class Person {

    protected String name;

    //持有中介者的引用
    protected Mediator mediator;

    public Person(String name, Mediator mediator) {
        this.name = name;
        this.mediator = mediator;
    }
}
/**
 * 具体的中介者-中介机构
 **/
public class MediatorStructure extends Mediator {

    //中介知晓 房租出租人和承租人的信息
    private HouseOwner houseOwner;  //房主

    private Tenant tenant;  //租房者

    public Tenant getTenant() {
        return tenant;
    }

    public void setTenant(Tenant tenant) {
        this.tenant = tenant;
    }

    public HouseOwner getHouseOwner() {
        return houseOwner;
    }

    public void setHouseOwner(HouseOwner houseOwner) {
        this.houseOwner = houseOwner;
    }

    @Override
    public void contact(String message, Person person) {
        if(person == houseOwner){
            //如果是房主,则租房者获得信息
            tenant.getMessage(message);
        }else{
            //如果是租房者,则房租获得信息
            houseOwner.getMessage(message);
        }
    }
}
/**
 * 具体同事类-房租拥有者
 **/
public class HouseOwner extends Person {

    public HouseOwner(String name, Mediator mediator) {
        super(name, mediator);
    }

    //与中介联系
    public void contact(String message){
        mediator.contact(message,this);
    }

    //获取信息
    public void getMessage(String message){
        System.out.println("房主: " + name +",获取到的信息: " + message);
    }
}
/**
 * 具体同事类-承租人
 **/
public class Tenant extends Person {

    public Tenant(String name, Mediator mediator) {
        super(name, mediator);
    }

    public void contact(String message){
        mediator.contact(message,this);
    }

    public void getMessage(String message){
        System.out.println("租房者"+name+",获取到的信息: " + message);
    }
}
public class Client {

    public static void main(String[] args) {

        //中介机构
        MediatorStructure mediator =  new MediatorStructure();

        //房主
        HouseOwner houseOwner = new HouseOwner("张三", mediator);

        //租房者
        Tenant tenant = new Tenant("李四", mediator);

        //中介收集房主及租房者信息
        mediator.setHouseOwner(houseOwner);
        mediator.setTenant(tenant);

        //租房人的需求
        tenant.contact("需要在天通苑附近找一个,两室一厅的房子一家人住,房租在5000~6000之间");

        //房主的需求
        houseOwner.contact("出租一套天通苑地跌站附近的两室一厅,房租6000,可谈");
    }
}
5 中介者模式总结

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1142784.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试经典150 | 栈】最小栈

文章目录 Tag题目来源题目解读解题思路方法一:辅助栈方法二:一个栈方法三:栈中存放差值 其他语言python3 写在最后 Tag 【设计类】【栈】 题目来源 155. 最小栈 题目解读 本题是一个设计类的题目,设计一个最小栈类 MinStack() …

蓝桥杯 Java 括号序列

本算法需要把问题分解成三步: 第一步:算出 ((() 填充 ( 的方案 第二步:算出 ((() 填充 ) 的方案 第三步:把两个方案相乘 第二步可以把原方案当成将 ((() 逆转成 ())) 再填充 ( ,这样就可以重复第一步用的算法 第一步…

ChatGLM3 本地部署的解决方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

基于springboot实现网上图书商城管理系统项目【项目源码+论文说明】

基于springboot实现网上图书商城管理系统演示 摘要 在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括网上图书商城的网络应用,在外国网上图书商城已经是很普遍的方式,不过国内的管理网站可能还处于起步…

解读PowerJob的秘密武器:探索Akka Toolkit原理

本文适合有 Java 基础知识的人群 Akka is a toolkit for building highly concurrent, distributed, and resilient message-driven applications for Java and Scala. 上面这段文字摘抄自 Akka 官网(akka.io),翻译成中文也就是:“…

接口返回响应,统一封装(ResponseBodyAdvice + Result)(SpringBoot)

需求 接口的返回响应&#xff0c;封装成统一的数据格式&#xff0c;再返回给前端。 依赖 对于SpringBoot项目&#xff0c;接口层基于 SpringWeb&#xff0c;也就是 SpringMVC。 <dependency><groupId>org.springframework.boot</groupId><artifactId&g…

你有没有注意到Java越来越卷了?

你有没有注意到Java越来越卷了&#xff1f; 早在201几年就开始这么认为了&#xff0c;十年前都这么嚷嚷了&#xff0c;现在还有人问这个问题&#xff0c;放心java死不了&#xff0c;最近很多小伙伴找我&#xff0c;说想要一些Java资料&#xff0c;然后我根据自己从业十年经验&…

疾控采样器在污水采样中发挥的重要作用

便携式污水采样器现在的应用领域越来越多样化&#xff0c;适用范围也更广泛。主要适用于各级环境监测站、监察机构、科研院所、水务、市政及污水处理厂&#xff0c;对工业污染源排放口、江、河、湖、海等水样进行自动采样。可广泛应用于水环保、疾控采样、污水禁毒等领域。 对…

BI技巧丨利用Rank函数排名

实际业务场景中&#xff0c;除了各类条件计算、同环比计算以外&#xff0c;排名也是比较常见的问题&#xff0c;我们经常需要使用Rankx函数来进行某些TopN计算等。 微软新推出的开窗函数Rank&#xff0c;可以说是对排名问题的一次优化&#xff0c;也解决了一些之前Rankx函数的…

二分归并法将两个数组合并

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> main() {int a[5] {1,3,4,5,6};int b[4] {2,7,8,9};int c[9];int m0, n0,k0;while (m < 5 && n < 4){if (a[m] < b[n]){c[k] a[m];//谁小谁先进数组m; k;}else{c[k] b[n];k; n;}}while (m <…

flask 实践

flask框架研究&#xff1a; https://blog.csdn.net/shifengboy/article/details/114274271 https://blog.csdn.net/weixin_67531112/article/details/128256170 实现下载文件功能 vim test.py import io from flask import Flask, send_fileapp Flask(__name__) app.route(/…

【Acwing167】木棒(dfs+剪枝)超级详细题解!

题目描述 统一说明 本题思路来源于acwing算法提高课 木棍指题目输入数据所指的东西 木棒指最后由木棍拼接而成的最长的东西 看本文需要准备的知识 1.dfs基本思想 2.对“剪枝”这个词汇有一个基本的认识即可 整体分析 这个题目最终是求木棒的最短长度&#xff0c;所以我…

什么是合成数据?

合成数据是在计算机上生成的信息&#xff0c;用于增强或替换真实数据&#xff0c;以改进 AI 模型、保护敏感数据并减轻偏见。 将大量数据对准人类&#xff0c;你会得到信息过载。但是&#xff0c;如果你对计算机做同样的事情&#xff0c;你会得到机器学习模型&#xff0c;当你…

网络协议--TCP:传输控制协议

17.1 引言 本章将介绍TCP为应用层提供的服务&#xff0c;以及TCP首部中的各个字段。随后的几章我们在了解TCP的工作过程中将对这些字段作详细介绍。 对TCP的介绍将由本章开始&#xff0c;并一直包括随后的7章。第18章描述如何建立和终止一个TCP连接&#xff0c;第19和第20章将…

J2EE项目部署与发布(Windows版本)->会议OA单体项目Windows部署,spa前后端分离项目Windows部署

会议OA单体项目Windows部署spa前后端分离项目Windows部署 1.会议OA单体项目Windows部署&#xff08;以实施的角度&#xff09; 将项目放入webapp&#xff0c;项目能够访问: 首先拿到war包和数据库脚本&#xff0c;并检查是否有什么问题。 如何查看项目报错信息&#xff08;当你…

2015年亚太杯APMCM数学建模大赛B题城市公共交通服务水平动态评价模型求解全过程文档及程序

2015年亚太杯APMCM数学建模大赛 B题 城市公共交通服务水平动态评价模型 原题再现 城市公共交通服务评价是城市公共交通系统建设和提高公共交通运营效率的重要组成部分。对于公交企业&#xff0c;管理和规划部门&#xff0c;传统公交车站、线路和换乘枢纽的规划数据只是基于主…

切割后面积最大的蛋糕

切割后面积最大的蛋糕 题记&#xff1a; 矩形蛋糕的高度为 h 且宽度为 w&#xff0c;给你两个整数数组 horizontalCuts 和 verticalCuts&#xff0c;其中&#xff1a; horizontalCuts[i] 是从矩形蛋糕顶部到第 i 个水平切口的距离verticalCuts[j] 是从矩形蛋糕的左侧到第 j …

探秘Spring的设计精髓,深入解析架构原理

序员与平庸的程序员之间的区别&#xff0c;是在于认为自己的代码重要还是数据结构更加重要。平庸的程序员眼里只有代码&#xff0c;优秀的程序员则关注数据结构及之前的关系。” 1、spring的设计理念 spring提供了一个轻量级的开发框架&#xff0c;抽象了实际开发中的很多共…

解决大模型“裸”奔,恒生打通落地金融“最后一公里”

大数据产业创新服务媒体 ——聚焦数据 改变商业 在数字化的21世纪&#xff0c;技术的每一次进步都能引发行业的巨大变革。进入2023年&#xff0c;大模型无疑是金融数智化升级的关键变革力量。无论是高频交易、风险管理&#xff0c;还是金融咨询和客户服务&#xff0c;大模型都…

【Linux】虚拟机项目部署与发布

目录 一、Linux部署单机项目 1.1 优缺点 1.2 将项目共享到虚拟机 1.3 解压后将war包放入tomcat 1.4 数据库导入脚本 1.5 Tomcat启动项目 二、部署前后端分离项目 2.1 准备工作 2.2 部署SPA项目 2.2.1 nginx反向代理 2.2.2 SPA项目宿主机访问 一、Linux部署单机项目…