设计模式-中介者模式

简介

程序应用有大大小小的对象的组成,将大对象拆分成小对象可以提高复用性,但是相对应的可能也会造成对象之间的关联程度增大,降低复用性。中介者模式的设计在于提供一个统一的中间者管理这些对象,降低对象之间的耦合性。将对象之间的多对多关系转化为一对多的关系

demo

假设有一场比赛,分为两个队伍,当一个队伍全部died后,另外一个队伍获胜,如果不存在中介者的时候,需要保存自己伙伴和敌人,每个对象之间紧紧耦合在一起。如果想增加同伙和增加队伍等都会非常麻烦,下面引入一种中介者进行统一管理,减少对象之间的耦合关系

class Player{
  public team:string;
  public name:string;
  public state:string;
  constructor(team:string,name:string){
    this.team = team;
    this.name = name;
    this.state = "alive";
    PlayerManager.add(this);
  }
  died(){
    this.state = "died";
    PlayerManager.lose(this);
  }
  lose(){
    console.log(`${this.name}失败`);
  }
  win(){
    console.log(`${this.name}获胜`);
  }
}

interface IPManager{
  add:(player:Player)=>void;
  lose:(Player:Player)=>void;
}
const PlayerManager:IPManager = (function(){
  const players = {};
  return {
    add(player:Player){
      const color:string = player.team;
      players[color] = players[color]||[];
      players[color].push(player);
    },
    lose(player:Player){
      const teamColor:string = player.team;
      let all_dead:boolean = true;
      for(let i =0,player:Player;player = players[teamColor][i++];){
        if(player.state==="alive"){
          all_dead = false;
          break;
        }
      }
      // 本队全部死亡
      if(all_dead){
        for(let i = 0,player:Player;player = players[teamColor][i++];){
          player.lose();
        }
        for(const color in players){
          if(color!==teamColor){
            players[color].forEach((player:Player)=>{
              player.win();
            })
          }
        }
      }
    }
  } 
})()

const player1 = new Player("blue","张一");
const player2 = new Player("blue","张二");
const player3 = new Player("blue","张三");
const player4 = new Player("red","王一");
const player5 = new Player("red","王二");
const player6 = new Player("red","王三");

player1.died();
player2.died();
player3.died();
//张一失败
//张二失败
//张三失败
//王一获胜
//王二获胜
//王三获胜

如果想在当前基础上增加队伍,或者增加其他功能也是非常的方便

总结

中介者模式可以有效降低对象之间的耦合性,符合最小知识原则,即对象尽可能少的了解其他对象。但也不是没有缺点,中介者模式其实是将对象之间的关联复杂性转移为中介者对象的复杂性,中介者对象本身是一个非常庞大的系统,难以维护。

写程序是快速交付生产,而不是过渡的堆砌模式和设计

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值