• 设计模式 18 中介者模式


    参考源

    https://www.bilibili.com/video/BV1u3411P7Na?p=26&vd_source=299f4bc123b19e7d6f66fefd8f124a03


    中介者模式(Mediator Pattern)属于行为型模式

    概述

    一提到中介,大家都非常熟悉,生活中最常见的就是房屋中介。

    虽然中介要收取一定费用,但却能给房东和租客都提供大量遍历,房东只需要把房屋信息提供给中介,租客也只需要将租金交给中介,由中介处理中介环节,给两方都提供了便利。这就是中介模式的应用。

    代码实现

    这里以房屋中介来介绍中介模式:

    1、定义用户

    1. /**
    2. * 用户
    3. */
    4. public class User {
    5. /**
    6. * 姓名
    7. */
    8. private final String name;
    9. /**
    10. * 电话
    11. */
    12. private final String phone;
    13. /**
    14. * 构造姓名和电话
    15. * @param name 姓名
    16. * @param phone 电话
    17. */
    18. public User(String name, String phone) {
    19. this.name = name;
    20. this.phone = phone;
    21. }
    22. /**
    23. * 需要具体想找的地址和中介
    24. * @param address 地址
    25. * @param mediator 中介
    26. * @return 用户
    27. */
    28. public User find(String address, Mediator mediator) {
    29. // 中介根据地址找房
    30. return mediator.find(address);
    31. }
    32. @Override
    33. public String toString() {
    34. return "(姓名:" + name + ",电话:" + phone + ")";
    35. }
    36. }

    2、定义中介

    1. /**
    2. * 中介
    3. */
    4. public class Mediator {
    5. /**
    6. * 存储在售房屋
    7. */
    8. private final Map userMap = new HashMap<>();
    9. /**
    10. * 登记房屋
    11. * @param address 地址
    12. * @param user 用户
    13. */
    14. public void register(String address, User user) {
    15. userMap.put(address, user);
    16. }
    17. /**
    18. * 查找房源
    19. * @param address 地址
    20. * @return 房东
    21. */
    22. public User find(String address) {
    23. return userMap.get(address);
    24. }
    25. }

    3、调用

    1. // 房东
    2. User landlord = new User("张三", "10086");
    3. // 租客
    4. User tenant = new User("李四", "10010");
    5. // 中介
    6. Mediator mediator = new Mediator();
    7. // 中介登记房产
    8. mediator.register("重庆市北碚区金科小区", landlord);
    9. // 租客委托中介查找符合要求房子的房东
    10. User result = tenant.find("重庆市北碚区龙湖小区", mediator);
    11. if (result == null) {
    12. System.out.println("没有找到对应的房源");
    13. } else {
    14. System.out.print("成功找到对应房源:");
    15. System.out.println(result);
    16. }
    17. // 再次查找
    18. result = tenant.find("重庆市北碚区金科小区", mediator);
    19. if(result == null) {
    20. System.out.println("没有找到对应的房源");
    21. } else {
    22. System.out.print("成功找到对应房源:");
    23. System.out.println(result);
    24. }

    输出结果为:

    1. 没有找到对应的房源
    2. 成功找到对应房源:(姓名:张三,电话:10086)

    这样就实现了日常生活中的通过中介租房。中介者模式优化了原有的复杂多对多关系,而是将其简化为一对多的关系,更容易理解一些。

    优缺点

    优点

    1、降低了类的复杂度,将一对多转化成了一对一。

    2、各个类之间的解耦。

    3、符合迪米特原则。

    缺点

    中介者会庞大,变得复杂难以维护。

    使用场景

    1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。

    2、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

  • 相关阅读:
    基于大数据的时间序列股价预测分析与可视化 - lstm 计算机竞赛
    十三、聚簇索引和非聚簇索引
    socket can应用程序在发送时,怎么控制是标准帧还是扩展帧?
    Java通过File获取Class字节码并构造Class对象
    超详细教程—快速创建PD
    源码编译net-snmp
    ARM体系架构
    Spring Boot单元测试
    Spring源码——Bean完整的生命周期详解
    数据结构 -作用及基本概念
  • 原文地址:https://blog.csdn.net/qq_37770674/article/details/126335654