每日JavaScript设计模式:Day 6 适配器模式

26 篇文章 0 订阅
9 篇文章 0 订阅

适配器模式(adapter)

将一个类(对象)的接口(方法或属性)转化成另外一个接口,以满足用户需求,使类(对象)之间的接口不兼容问题通过适配器得以解决。

简单来说就是通过一个中间的接口,让两个格式不兼容的类/函数/数据等能够相互兼容。举个生活中的例子,mac电脑一般没有dvi接口(就是连台式显示器的接口),只有usb接口,那这个时候我们要连显示器怎么办呢?买一个usb转dvi的转换插头,这样就能够让mac电脑使用电脑显示器了。

这就是一个适配器的例子。

代码中的例子:参数适配器
function doSomething(name,type,color,size,prize){}

// 上面的方法中有很多参数,记住这些参数的顺序是比较困难的,而且有的时候我们不需要传入所有参数
// 我们可以写一个适配器,将参数列表接口转换成对象参数接口,适配器中给出一些默认值,这样我们可以实现适配参数个数等功能
function doSomethingAdapter(obj){
	let _adapter = { // 给出一个默认
		name: 'bright',
		type: 'superhero',
		color: 'skyblue',
		size: '50m',
		prize: 'infinite'
	}
	for(let key in _adapter)
		_adapter[key]=obj[key]||_adapter[key];

	doSomething(obj.name,obj.type,...);
}
例子:数据适配

有时候我们得到的是数组,但是期望的是对象,这时候我们也可以使用一个适配器来进行数据格式的转换

// 假定我们得到了以下的数组
var arr = ['javascript', 'frontend', 'data structure']
// 我们希望变成这样
var obj = {
	name: 'javascript',
	type: 'frontend',
	basic: 'data structure'
}

// 我们可以写一个下面的适配器, names表示我们希望给数组成员的名字
function adapter(arr, names){
	var obj = {};
	for(let item of arr){
		obj[names] = item;	
	}
	return obj;
}

// 使用
var obj = adapter(arr, ['name','type','basic']);

这种方式在我们需要在同一个数组中进行多次查找时会比较有用,如果我们用一个键来标识数组中的一个元素,那么查找的时间复杂度是O(1),如果是线性查找,时间复杂度是O(n)。

总结

适配器模式一般用于适配已有的且不太好改动的接口,比如我们前端要从后端拿数据,但是后端拿到的数据格式并不是我们所期望的,而我们又不能直接更改后端数据接口,这时候我们考虑用一个适配器来进行数据转换。

当前上面所说的都只是适配器模式的一些简单应用。我们要抓住的核心的设计思想是转换的思想,即通过一定的中间接口设计来实现我们需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值