提高代码可扩展性之适配器模式

工作过程中,需求变更,接口改变使常有的事。为了既不影响原有接口方法,又要实现变更的需求,可以采用一些设计模式提高代码的可扩展性。总结一下,可扩展性有这么几个特点:1、需求变更不需要重写。2、代码修改不会引起大规模的变动。3、方便加入新的模块。

适配器模式

适配器模式的目的:通过写一个适配器代替替换。
适配器的应用场景:面临接口不通用的问题。
设计模式中的适配器模式,通常表现在两个方面:一是方法适配,用新方法替代老方法。二是参数适配,同一个方法传入的参数发生改变。
方法适配,就是想用新的方法替代老的方法。比如为了简化代码,你想用log函数代替console.log函数,你可以用到适配器模式,如下

	var log = (function () {
  		return window.console.log;
	})()

又比如用简单的函数代替jquery中的函数,也可以用到这种设计模式,如用A.o函数代替$.on函数

	window.A = $;
	A.o = function () {
  		return $.on();
	}

上述描述的是适配器模式中的方法适配,下面描述方法中的参数适配,参数适配大概长得这么样,如下图所示:

	function f1(obj) {
  		var _default = {
    	name: "xxx",
    	color: "red",
  		}
  		for (var item in _default) {
    		_default[i] = obj[i] || _default[i];
  		}
  		//下面处理自己的业务逻辑。
	}

这么做的的好处是,面对obj参数中属性名称的改变,如接口参数的变更,只需修改参数适配的模块就好,不需要大幅度修改自己业务代码里面的代码。业务代码中可能有大量地方使用了_default中的属性,这是全局搜索修改显得不那么美观,如果参数量比较大,而且还容易出错。
关于参数结构我曾想到es6中的参数结构,但似乎没有适配器模式好,看看参数结构长什么样:

		function conn({ip,port,db,user,pwd}){
			ip=ip||"localhost";//"localhost"
			port=port||3306; //8080
			db=db||"test";   //"test"
			user=user||"root"; //"sa"
			pwd=pwd||""; //""
		}
		conn({ port:8080, user:"sa" });

es6的这种做法虽然能满足默认参数,但传入的参数是死的,并不能满足接口变更参数发生变化引起的问题,如pwd参数改成upwd。虽然长得像,仔细分析却能发现不同点。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值