• 设计模式 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、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

  • 相关阅读:
    Redis系列之常见数据类型应用场景
    elementUi——table表格中内容超过2行后,省略号...展示,鼠标悬停展示全部
    ARP协议详解
    Spring Cloud Alibaba —— 服务注册与配置中心
    Unity --- 动画分层
    【CKA考试笔记】十六、资源限制
    Qt之随机数
    CSS 效果 圆形里一个文字居中
    Java毕设项目基于的智慧小区计算机(附源码+系统+数据库+LW)
    多仓库管理工具git-repo部署
  • 原文地址:https://blog.csdn.net/qq_37770674/article/details/126335654