中介者模式:集中协调对象交互,简化耦合实现灵活可控的系统结构

一、引言

​ 中介者模式(Mediator Pattern)是一种行为型设计模式,它通过引入中介者对象来简化多个对象之间的交互关系,从而使各个对象不需要显式地相互引用,降低对象之间的耦合度。这种模式通过集中化对象之间的通信,使得系统更容易理解和维护,同时也便于控制对象间的复杂交互。

二、应用场景与技术背景

中介者模式适用于以下场景:

  1. 多个类之间存在复杂的网状交互关系,且这些交互关系随着需求变更容易变得混乱和难以管理。
  2. 当系统中某个类过多依赖其他类,或者类间依赖关系发生变化时,可能需要频繁修改原有代码。

例如,在多人在线游戏中,玩家角色之间可以直接互动(攻击、交易、组队等),这种直接交互会导致角色类之间的耦合度极高,而且随着游戏规则的更新,角色间交互逻辑的维护成本也会非常高。通过中介者模式,可以创建一个游戏规则管理器来集中处理角色间的交互,从而降低角色类之间的耦合度,提高系统的可维护性。

三、模式定义与实现

中介者模式的核心组成部分包括:

在这里插入图片描述

  1. Mediator(中介者角色):定义一个接口,用于与各个Colleague对象进行通信,集中处理Colleague对象之间的交互。
  2. ConcreteMediator(具体中介者角色):实现Mediator接口,它知道并维护各个Colleague对象,并负责协调它们之间的交互关系。
  3. Colleague(同事角色):每一个Colleague都知道中介者,并通过中介者与其他Colleague对象进行通信,而不是直接与其他Colleague通信。

以多人在线游戏中的玩家角色交互为例,来具体实现中介者模式:

  1. 定义中介者接口(Mediator):创建一个名为GameMediator的接口,声明处理玩家角色交互的方法。

    public interface GameMediator {
        void attack(Player attacker, Player target);
        void trade(Player requester, Player accepter, Item item);
        void formTeam(Player leader, Player joiner);
    }
    
  2. 定义具体中介者类(ConcreteMediator):创建一个名为GameRulesManager的类,实现GameMediator接口,处理玩家角色的各种交互行为。

    public class GameRulesManager implements GameMediator {
    
        @Override
    public void attack(Player attacker, Player target) {
            // 根据游戏规则处理攻击行为
            System.out.println(attacker.getName() + " 攻击了 " + target.getName());
        }
    
        @Override
        public void trade(Player requester, Player accepter, Item item) {
            // 根据游戏规则处理交易行为
            System.out.println(requester.getName() + " 与 " + accepter.getName() + " 进行了交易, 物品:" + item.getItemName());
        }
    
    @Override
        public void formTeam(Player leader, Player joiner) {
            // 根据游戏规则处理组队行为
            System.out.println(joiner.getName() + " 加入了由 " + leader.getName() + " 的队伍");
        }
    }
    
  3. 定义同事角色(Colleague):创建一个名为Player的类,代表游戏中的玩家角色,拥有自身的属性和方法,并通过中介者与其他玩家进行交互。

    public class Player {
        private String name;
        private GameMediator mediator;
    
        public Player(String name) {
            this.name = name;
        }
    
        public Player(String name, GameMediator mediator) {
            this.name = name;
            this.mediator = mediator;
        }
    
        public String getName() {
            return name;
        }
    
        public void attack(Player target) {
            mediator.attack(this, target);
        }
    
        public void requestTrade(Player player, Item item) {
            mediator.trade(this, player, item);
        }
    
        public void joinTeam(Player leader) {
            mediator.formTeam(leader, this);
        }
    }
    
  4. 物品(Item)类:

    public class Item {
        private String itemName;
        private int itemValue;
    
        public Item(String itemName, int itemValue) {
        this.itemName = itemName;
            this.itemValue = itemValue;
        }
    
        public String getItemName() {
            return itemName;
        }
    
        public int getItemValue() {
            return itemValue;
        }
    
    @Override
        public String toString() {
            return "Item{" +
                    "itemName='" + itemName + '\'' +
                    ", itemValue=" + itemValue +
                    '}';
        }
    }
    
  5. 应用端使用:在游戏中,玩家角色通过中介者来发起和响应各种交互请求。

    public class MediatorPatternDemo {
        public static void main(String[] args) {
            // 创建玩家和中介者
            Player player1 = new Player("玩家A", new GameRulesManager());
            Player player2 = new Player("玩家B", new GameRulesManager());
    
            // 玩家A攻击玩家B
            player1.attack(player2);
    
            // 玩家A请求与玩家B交易
            Item item = new Item("道具", 100);
            player1.requestTrade(player2, item);
    
            // 玩家B加入玩家A的队伍
            player2.joinTeam(player1);
        }
    }
    
    

    测试结果

    在这里插入图片描述

四、优缺点分析

优点:

  1. 减少对象之间的耦合度:通过中介者集中处理对象间的交互,避免了对象间的直接引用和依赖,使得系统更易于理解和维护。
  2. 简化系统结构:将原本复杂的多对多交互关系转化为一对多的关系,有利于控制和管理复杂行为。

潜在挑战:

  1. 中介者类可能会成为庞大而复杂的单点,增加了系统的复杂性。
  2. 如果中介者的职责划分不当,可能会导致部分职责过于集中,不易维护。

总结:

中介者模式通过引入中介者对象来管理和协调多个对象之间的交互,有效降低了对象间的耦合度,提升了系统的可维护性和扩展性。在实际应用中,合理运用中介者模式有助于理清对象间的交互逻辑,优化系统架构,但在设计时需注意避免中介者类过于庞大和复杂,保证其职责明确且易于维护。

  • 18
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值