当前位置:首页 > 日记 > 正文

对Javascript系列(39)的深入理解:设计模式适配器模式的详细解决方案

对Javascript系列(39)的深入理解:设计模式适配器模式的详细解决方案
介绍

适配器模式(适配器)是一个类(对象)接口(或属性)到另一个接口到客户需要(或属性),适配器模式造成的,因为不兼容的接口不能与这些类(对象)一起工作。

文本

我们给一个飞鸭例(码头)(粉)和嘎嘎(嘎嘎)的行为,和土耳其也飞(飞)的行为,但声音咯咯笑(餐桌)。如果你想有一个土耳其嘎嘎(嘎嘎)这一行动,庸医的方法我们可以重用的鸭子,但具体的电话也应该开始了,在这一点上,我们可以创建一个适配器的火鸡,火鸡还支持嘎方法,部叫餐桌。

好的,我们一步一步地开始,首先定义鸭子和土耳其的抽象行为,即每个方法的功能。

复制代码代码如下所示:



var =函数(){()

};

duck.prototype.fly =函数(){

抛出新错误()必须重写该方法!;

};

duck.prototype.quack =函数(){

抛出新错误()必须重写该方法!;

}

土耳其

var =函数(){()

};

turkey.prototype.fly =函数(){

抛出新错误()必须重写该方法!;

};

turkey.prototype.bble =函数(){

抛出新错误()必须重写该方法!;

};
然后对特定的鸭子和火鸡的构造分别进行了重新定义:

复制代码代码如下所示:



Var MallardDuck =函数(){()

Duck.apply(本);

};

mallardduck.prototype =新(鸭); / /鸭原型

(MallardDuck.prototype.fly函数){

console.log(可以飞很长的距离!;

};

(mallardduck.prototype.quack =功能){

console.log(加加!Gaga!;

};

土耳其

Var WildTurkey =函数(){()

Turkey.apply(本);

};

wildturkey.prototype =新(土耳其); / /土耳其原型

(wildturkey.prototype.fly =功能){

console.log(飞行的距离似乎短了一点!)

};

(wildturkey.prototype.bble =功能){

console.log(咯咯!扔出!;

};
让土耳其也支持庸医的方法,我们创建了一个新的土耳其适配器,TurkeyAdapter:

复制代码代码如下所示:

无功turkeyadapter =功能(oturkey){

Duck.apply(本);

this.oturkey = oturkey;

};

turkeyadapter.prototype =新鸭();

turkeyadapter.prototype.quack =函数(){

This.oTurkey.bble();

};

turkeyadapter.prototype.fly =函数(){

无功nfly = 0;

无功nlenfly = 5;

为(;;nfly < nlenfly;){

This.oTurkey.fly();

nfly = nfly + 1;

}

};
构造函数接受一个土耳其实例对象,然后用鸭子做申请,其适配器的原型是鸭子,然后修改其原型嘎方法,为了给oturkey.bble()内部。苍蝇的方法也作了一些修改,允许土耳其飞5次(内部也叫自己的oturkey.fly()方法)。

调用方法非常清晰,测试将能够知道结果。

复制代码代码如下所示:

无功omallardduck =新MallardDuck();

无功owildturkey =新WildTurkey();

无功oturkeyadapter =新TurkeyAdapter(owildturkey);

鸭/原始行为

OMallardDuck.fly();

OMallardDuck.quack();

最初的行为/土耳其

OWildTurkey.fly();

OWildTurkey.bble();

土耳其的行为(土耳其)

OTurkeyAdapter.fly();

OTurkeyAdapter.quack();
总结

这是使用适配器模式的好方法吗如果有下列情况,建议使用:

1。使用已经存在的对象,但它的方法或属性接口不符合您的要求;

2、您希望创建一个可重用对象,该对象可以与其他不相关的对象或不可见对象(即与接口方法或属性不兼容的对象)一起工作。

三.要使用现有的对象,但不能继承每个原型来匹配它的接口。

此外,适配器模式和其他一些模式可能很容易混淆。这里有一些一般性的差异:

1、虽然适配器和桥接模式相似,但桥接的起点不同。桥接的目的是将接口部分与实现部分分开,以便它们可以更容易地、相对独立地改变。

2、装饰模式在不改变接口的情况下增强了其他对象的功能,因此其透明性优于适配器。结果是,装修支持递归组合,而纯粹使用适配器是不可能的。

3。代理模式为另一个对象定义代理而无需更改其接口。

相关文章

用Javascript开发IE浏览器的本地插件实例

用Javascript开发IE浏览器的本地插件实例

浏览器,插件,实例,电脑软件,Javascript,用js开发的IE插件可以在当前浏览页面执行js代码,在此基础上任何用户都可以考虑该功能。 您可以对无用的网站进行一些常见的处理,例如,提取某些信息,或者您可以对特定的网站进行特殊处理(例如,急于购买火车…

PS绘制纹理动画游戏开始按钮

PS绘制纹理动画游戏开始按钮

纹理,绘制,动画,按钮,游戏,本文主要介绍了PS画一个文本动画游戏开始按钮,和你喜欢的朋友可以一起学习。 设计素描 uff1a PS绘制纹理动画游戏开始按钮 1。图层分析 2。产生的背景 新的600×72分辨率的RGB 600px,帆布,用简单的工具做一个径向和…

PS图象处理软件建立了美丽的阳光和

PS图象处理软件建立了美丽的阳光和

阳光,荒原,图象,处理软件,建立了,首先,材质图非常专业。在选定景区后,根据景区的特点,选择合适的服装道具。效果很好,很好。以后要简单地润色,提高意境,美化人物。 首先,材质图非常专业。在选定景区后,根据景区的特点,选择合适的服装道具。效果很好…

手绘MX绘图工具的新变化和应用(图解

手绘MX绘图工具的新变化和应用(图解

图示,手绘,新变化,绘图工具,电脑软件,本文介绍了手绘九大绘图工具的新变化及其应用。这个教程很全面,用图表的形式很容易理解,我推荐给你,希望能对你有所帮助。 本文介绍了手绘九大绘图工具的新变化及其应用。这个教程很全面,用图形形式很容易…

山区岩石PS技术小型演讲厅:文本编排

山区岩石PS技术小型演讲厅:文本编排

文本,岩石,山区,技术,电脑软件,本教程再次向您推荐教程。本教程是在比较的基础上,主要介绍文字编排的设计。作者仍然是一位山区摇滚乐的朋友。 本教程是介绍给朋友的文字设计,教程比较基础,适合初学者学习,作者还是山石,一起学习吧! 本教程结束…

js决定了为移动电话和PC端选择不同

js决定了为移动电话和PC端选择不同

事件,执行,选择,方法,移动电话,本文的示例讲述了js决定手机和PC端不同执行事件的方法,供大家参考: 确定它是否是一部手机: 功能以移动(){ 无功suseragent = navigator.useragent.tolowercase(), bisipad = suseragent.match( / /我的iPad)= =iPad bi…

PS教你创建扫描字体,为将来的技术感

PS教你创建扫描字体,为将来的技术感

扫描,字体,教你,将来,技术,如果你是一个新手,本教程将让你更好地理解PS图象处理软件的图层样式的力量。图层样式是画画,重要的文字效果,所以朋友通常要更注重实践,熟悉和掌握技能。 如果你是一个新手,本教程将让你更好地理解PS图象处理软件的图…

js介绍Ajax返回数组的处理

js介绍Ajax返回数组的处理

数组,电脑软件,js,Ajax,引进uff1a ajax异步传输,可以传输字符串,但是数组这样的数据,传输不是很好,你在这个时候做什么 答案是它可以用JSON处理,数据通过背景JSON编码在后台! 然后通过js解析客户端。 问题就解决了!JSON是一种很好的数据格式! …

Javascript实现最频繁的字符和计算字符串

Javascript实现最频繁的字符和计算字符串

字符串,字符,计算,频繁,次数,字符串中最频繁的字符是什么,它们出现了多少次 要看到这一要求,我认为大多数人首先应该考虑将它们转换成数组,然后处理它们,当然,它们可以解决问题。这里,我们提供了一个巧妙的算法设计,不需要转移数组,可以很快地解决…

PS图象处理软件的目的是使一个大的

PS图象处理软件的目的是使一个大的

图象,处理软件,海报,目的是,电脑软件,水果地图的设计非常好,很值得大师的作品,很多材料都是手工制作的,如背景、地板、灯饰、水晶等。同时,画面构图和一些表达技巧也很有创意,值得初学者学习。 效果图的设计非常好,很值得大师的作品,很多材料都是…

PS抠图抠图教程

PS抠图抠图教程

抠图,教程,电脑软件,PS,抠图是后续图像处理的重要基础。初学者认为抠图不好把握,其实抠图并不难,只要你有足够的耐心和细心,掌握PS图象处理软件的基本知识可以拉出来的图片完美。没有PS抠图这里为大家带来的PS抠图教程如何所以,一起学习吧 大家…

推荐一个封装的getelementsbyclass

推荐一个封装的getelementsbyclass

封装,方法,推荐,电脑软件,getelementsbyclassname,我们知道,原生js提供getelementsbyclassname方法。我们可以通过这种方法得到一组包含指定类的节点。我们应该注意集合,也就是说,这个函数返回一个数组。 然而,IE不支持这种方法,但这种方法非常…