中介者模式-坦克大战-js

概要

用一个中介象来封装一系列象交互。中介者使各象不需要相互引用,从而使其耦合松散,而且可以独立地改的交互。

类图

中介者模式

运行 

代码


console.log('中介在模式演示:');
var indexId = 0;
//抽象层--------------------
class Mediator {
    send(byid,toid, message) {
           
    }   
}
class Concrete {
    receive(byid, message) {
            
    }  
    send(toid, message) {

    }
}
//实现层----------
class ConcreteMediator extends Mediator {
    constructor() {
        super();
        this.tanks = new Array();
    }
    send(byid,toid, message) {
        this.tanks[toid].receive(byid, message);    
    }
    register(tank) {
        this.tanks.push(tank);
        tank.controlerCenter = this;
    }
}
class Tank extends Concrete {
    constructor() {
        super();
        this.id = indexId++;
        this.controlerCenter = null;
    }
    receive(byid, message) {
        console.log("my:" + this.id + " 收到" + byid + "的消息:" + message);
    }
    send(toid, message) {
        console.log("my:" + this.id + "发给" + toid + "消息:" + message);
        this.controlerCenter.send(this.id, toid, message);
    }
}
// 客户端
class Client {
    main() {
        // 坦克控制中心
        var controlerCenter = new ConcreteMediator();
        var tank1 = new Tank();
        var tank2 = new Tank();
        var tank3 = new Tank();
        controlerCenter.register(tank1);
        controlerCenter.register(tank2);
        controlerCenter.register(tank3);
        tank1.send(2, "你好");
    }
}
var client = new Client();
client.main();

实例分析

用一个中介象来封装一系列象交互。中介者使各象不需要相互引用,从而使其耦合松散,而且可以独立地改的交互。

这里解耦的就是坦克的send,只有设置一个toid和message就行,不需要和任何其他的坦克发生耦合。

耦合这东西,只要有业务关联,是不可能觉对消除的,只能是降低耦合,这里就是把彼此的直接耦合变成间接耦合

英语

mediator
n. 调停者; 传递者; 中介物
concrete
adj. 混凝土的; 实在的,具体的; 有形的; vi. 凝结; vt. 使凝固; 用混凝土修筑;
colleague
n. 同事,同僚

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值