Adapter,将一个类(对象)的接口(方法或者属性)转化为另一个接口,以满足用户需求,使类(对象)之间接口的不兼容问题通过适配器得以解决
适用场景
- 1、使用一个已经存在的对象,但其方法或属性接口不符合你的要求;
- 2、你想创建一个可复用的对象,该对象可以与其它不相关的对象或不可见对象(即接口方法或属性不兼容的对象)协同工作;
- 3、想使用已经存在的对象,但是不能对每一个都进行原型继承以匹配它的接口。对象适配器可以适配它的父对象接口方法或属性。
示例
我们想让Duck 和Turkey 的方法接口一致方便新功能使用,由于是老的代码我们不清楚直接修改是否会造成老代码无法使用,于是我们通过TurkeyAdapter做兼容
Class Duck {
fly () {
}
quack () {
}
}
Class Turkey {
fly () {
}
gobble () {
}
}
// 适配器
Class TurkeyAdapter {
constructor (turkey) {
this.turkey = turkey
}
fly () {
this.turkey.fly()
}
quack () { // 原本只有gobble 方法,通过适配器改造为quack方法
this.turkey.gobble()
}
}
var duck = new Duck();
var turkey = new Turkey();
var turkeyAdapter = new TurkeyAdapter(turkey);
//原有的鸭子行为
duck.fly();
duck.quack();
//原有的火鸡行为
turkey.fly();
turkey.gobble();
//适配器火鸡的行为(火鸡调用鸭子的方法名称)
turkeyAdapter.fly();
turkeyAdapter.quack();
适配器模式也经常用于日常的数据处理上,比如把一个有序的数组转化成我们需要的对象格式:
const arr = ['Javascript', 'book', '前端编程语言', '8月1日']
function arr2objAdapter(arr) { // 转化成我们需要的数据结构
return {
name: arr[0],
type: arr[1],
title: arr[2],
time: arr[3]
}
}
const adapterData = arr2objAdapter(arr)
网友评论