一、中介者模式
相当于new 了一个第三方的类,在游戏中常见。主程序负责调用其他精灵的类。并且可以随意操作每个类的每个属性,实现了通过一个类或多个类的值,操作另一个或另多个类的属性。
举个例子
游戏两精灵碰撞
Game.prototype.play=function(){
var 子弹类 = new 子弹类()
var 敌人类 = new 敌人类()
var 分数类 = new 分数类()
}
Game.prototype.update=function(){ // 主程序轮询函数 Game类
if(this.子弹类.x ===this.敌人类.x ){
this.敌人类.死亡();
this.分数类.加分();
}
}
game类是中介。
二、发布订阅模式
function Teachter(){
this.students=[];
}
Teachter.prototype.liuzuoye = function(txt){
for (let i = 0; i < this.students.length; i++) {
this.students[i].listen(txt)
}
}
function Student(name,myteacher){
this.name= name;
this.teachter = myteacher;
myteacher.students.push(this) // 关键宇语句
}
Student.prototype.listen=function(txt){
console.log("我是:"+ this.name+",我收到了老师留的作业:"+txt)
}
var laoshi = new Teachter();
var xiaohong = new Student("小红",laoshi);
var xiaoming = new Student("小明",laoshi);
laoshi.liuzuoye("背书!!")
每次创建student都会让老师类加入她的一个学生类。(订阅学生,一旦创建,立即加入)
每次老师留作业,都可以让她所有的学生开始执行学生的方法 (发布命令,执行对应的学生)
结果:
我是:小红,我收到了老师留的作业:背书!!
我是:小明,我收到了老师留的作业:背书!