这篇文章主要讲解了如何使用javascript中的访问者模式,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
介绍:访问者模式比较复杂,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对他们进行不同的访问操作。访问者模式的主要目的是将数据结构与数据操作相分离。
定义:提供一个作用于某对象结构中的个元素的操作表示,它使得可以再不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式
场景:使用PC结构demo来解释下访问者模式
示例:
var Keyboard = function(){
this.accept = function(computerPartVisitor){
computerPartVisitor.visit(this);
}
}
var Monitor = function(){
this.accept = function(computerPartVisitor){
computerPartVisitor.visit(this);
}
}
var Mouse = function(){
this.accept = function(computerPartVisitor){
computerPartVisitor.visit(this);
}
}
var Computer = function(){
var parts = [new Keyboard(), new Monitor(), new Mouse()];
this.accept = function(computerPartVisitor){
computerPartVisitor.visit(this);
_acceptAll(computerPartVisitor);
}
var _acceptAll = function(computerPartVisitor){
parts.map(function(item){
item.accept(computerPartVisitor)
});
}
}
var ComputerPartDisplayVisitor = function(){
this.visit = function(item){
if(item.constructor == Keyboard){
console.log("Displaying Keyboard.");
}else if(item.constructor == Monitor){
console.log("Displaying Monitor.");
}else if(item.constructor == Mouse){
console.log("Displaying Mouse.");
}else if(item.constructor == Computer){
console.log("Displaying Computer.");
}else{
console.log("Error");
}
}
}
var computer = new Computer();
computer.accept(new ComputerPartDisplayVisitor());
// Displaying Computer.
// Displaying Keyboard.
// Displaying Monitor.
// Displaying Mouse.
这个模式比较复杂,我们先介绍下组成:
访问者模式总结:
优点:
* 增加新的访问操作便捷,只需要加一个新的访问者类。
* 将有关原色对象的访问行为集合到一个访问者对象中,类的职责更清晰。
* 让用户在不修改现有元素层次结构的情况下,定义作用于该层次结构的操作。
缺点:
* 增加新的元素类很困难,在访问者模式下,每增加一个新的元素,对应要增加访问者中的操作。
* 破坏封装。访问者模式要求访问者对象访问并调用每一个元素对象的操作,这意味着元素必须暴露一些内部操作和内部状态。
适用场景:
* 一个对象结构包含多个类型的对象,希望对这些对象实施一些依赖其具体类型的操作。
* 需要对一个对象结构中的对象进行横多不同的并且不相关的操作,而且需要避免让这些操作污染这些对象的类。
* 对象结构中对象对应的类很少改变,但经常需要再次对象结构上定义新的操作。
看完上述内容,是不是对如何使用javascript中的访问者模式有进一步的了解,如果还想学习更多内容,欢迎关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。