观察者模式-坦克大战-js

概要

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。

类图

观察者模式

运行 

代码


console.log('观察者模式演示:');
var states = { sort: "sort", run: "run" }
var indexId = 0;
// 抽象层
class SubjectCommandCenter {
    constructor() {
        this.tanks = Array();
        this.state = states.sort;
    }
    attach(tank) {
        this.tanks.push(tank);
    }
    notify() {
        for (let i in this.tanks) {
            this.tanks[i].update(this.state);
        }
    }    
}
class ObserverTank {
    update(state) {
        
    }
}
// 实际层
class ConcreteCommandCenter extends SubjectCommandCenter {
    constructor() {
        super();
    }
    setDate(date) {
        if (date != this.state) {
            this.state = date;
            this.notify();
        }
    }
}
class ConcreteTank extends ObserverTank {
    constructor() {
        super();
        this.id = indexId++;
    }
    update(state) {
        if (state == states.sort) {
            this.sort();
        } else {
            this.run();
        }
    }
    sort() {
        console.log(this.id + "号坦克:sort");
    }
    run() {
        console.log(this.id + "号坦克:run");
    }
}
class TankTeam {
    constructor() {
        this.tanks = Array();
        this.commandCenter = new ConcreteCommandCenter();
        this.greates();
        this.register();
    }
    greates() {
        for (var i = 0; i < 10; i++) {
            this.tanks.push(new ConcreteTank());
        }
    }
    register() {
        for (var i in this.tanks) {
            this.commandCenter.attach(this.tanks[i]);
        }
    }
    command(date) {
        console.log("团部命令:" + date);
        this.commandCenter.setDate(date);
    }
}
// 客户端
class Client {
    main() {
        var tankTuan = new TankTeam();
        tankTuan.command(states.sort);
        tankTuan.command(states.run);
        tankTuan.command(states.sort);
    }
}
var client = new Client();
client.main();

英语

subject
n. 主题; 科目; [语] 主语; 国民; adj. 服从的; 易患…的; 受制于…的; 
observer
n. 观察者; [天] 观测者; 遵守者
concrete
adj. 混凝土的; 实在的,具体的; 有形的; vi. 凝结; vt. 使凝固; 用混凝土修筑; ...
attach
vt. 使依附; 贴上; 系上; 使依恋; vi. 附加; 附属; 伴随
detach
vt. 分离; 派遣; 使超然
notify
vt. 通告,通知; 公布

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值