对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。代理模式为另一个对象定义代理而无需更改其接口。

tag:适配器模式解决方案设计模式系列详细

相关内容