访问者模式

来源:互联网 发布:java小游戏源代码文件 编辑:程序博客网 时间:2024/05/23 17:44

访问者模式一般来说是把多种类型对象的共同操作抽象起来,放到一个函数里,然后以对象为参数,在函数里统一执行操作。类似于c++的多态,以子类指针或者引用为函数参数,然后根据传进来的对象类型,执行他所对应的方法。这个前提是,多个对象都具有相同的操作,但是不同的对象具体执行的代码可以不同。而在js里,是弱类型的,只要某个对象具有相应的方法就能被执行,这个传入的对象可以是函数参数或者this,c++里传入的对象要和形参对象在同一继承链上,并且是他的后代。

var objA = {
name:'hello',
showName: function() {
console.log(this.name)
}
}

var objB = {
name:'world',
showName: function() {
console.log(this.name)
}
}

function showInfo(obj) {
obj.showName();
}


showInfo(objA);

例子中showInfo函数是一个抽象出来的函数,这就是访问者,他负责统一访问传入对象的内容。js中,访问者只关心传入的对象能干嘛,而不关心他的类型。也就是说只要有某个方法或者属性就行,更直接点就是只要访问者里的代码执行而不出错就行,但是能执行不代表可以达到预期效果,所以还需要一定的前提。

在js中,数组Array原型中就有很多方法是访问者模式,比如push,push函数的源码类似于

Array.prototype.push=function(arg){

this[this.length++]=arg;

}

push函数就是一个访问者,不过他要访问的对象是this而不是函数形参。


0 0
原创粉丝点击