设计模式探究系列之Interface

1、接口的定义:

 

/*
 * Interface构造器
 * @param {String} name 接口名
 * @param {Array} methods 接口的抽象方法
 * @example var sAction = new Interface('sAction',["method1","method2","method3"]);
*/
var Interface = function(name,methods){
	if(arguments.length !== 2){
		throw new Error("Interface目前只支持两个参数,目前的参数个数:"+arguments.length);
	}
	this.name = name;
	this.methods = [];
	var i,
		len = methods.length;
	for(i=0;i<len;i++){
		if(typeof methods[i] !== 'string'){
			throw new Error("Interface中方法名不合法,应该为string类型");
		}
		this.methods.push(methods[i]);
	}
};
 

2、接口的实现:

 

 

/*
 * 接口的实现
 * @param {function} ImplementsClass 待实现的类
 * @param {Object} Interface1 被实现的Interface,Interface的实例
 * @example var cAction = function(){},
			   aAction = new Interface('aAction',['getA','setA']);
		     implemets(cAction,aAction);
*/
var implemets = function(ImplementsClass,Interface1,Interface2){
			if(arguments.length < 2){
				throw new Error("至少两个参数,而当前的参数个数:"+arguments.length);
			}
			if(typeof arguments[0] !== "function"){
				throw new Error("实现类的类型必须是function类型");
			}
			var i,
				len = arguments.length;
			for(i=1;i<len;i++){
				var interfaceA = arguments[i];
				if(interfaceA.constructor !== Interface){
					throw new Error(interfaceA+"不是Interface的实例,不是接口");
				}
				var j,
					methodLen = interfaceA.methods.length;
				for(j=0;j<methodLen;j++){
					var method = interfaceA.methods[j];
					if(!arguments[0].prototype[method]){
						arguments[0].prototype[method] = function(){};
					}
				}
			}
			
		};
 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值