<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>New Web Project</title>
<script type="text/javascript" charset="UTF-8">
/**
* 第二种,实现接口的方式:
* 属性检测方式
*
*/
/**
* interface Composite{
* function add(obj);
* function delete(obj);
* function update(obj);
* }
*
* interface FormItem{
* function select(obj);
*
* }
*
*/
//CompositeImpl implements Composite,FormItem
var CompositeImpl=function(){
//显示的在类的内部,接受所实现的接口
//一般来讲,项目经理在类的内部,告诉程序员在类的内部定义一个类的变量(数组),名字要固定,是一个规范。
this.inplementsInterfaces=['Composite','FormItem'];
}
/*
var CompositeImpl2=function(){
}*/
CompositeImpl.prototype.add=function(obj){
//do something
alert('add...');
}
CompositeImpl.prototype.remove=function(obj){
//do something
}
CompositeImpl.prototype.update=function(obj){
//do something
}
CompositeImpl.prototype.select=function(obj){
//do something
}
//检测类的对象的
function CheckCompositeImpl(instance){
//判断当前对象是否实现了所有的接口。
if(!IsImplements(instance,'Composite','FormItem')){
throw new Error('这个实列对象没有实现继承');
}
}
//公用的具体检测方法,检测类的核心方法 返回值boolean
//这个方法的主要目的,就是判断实列对象有没有实现相关的接口。
function IsImplements(object){
//arguments对象,获得函数的实际参数
for(var i=1;i<arguments.length;i++){
//接收所实现的每一个接口的名字
var interfaceName=arguments[i];
//判断此方法到底是成功的,还是失败的。
var interfaceFound=false;
for(var j=0;j<object.inplementsInterfaces.length;j++){
if(object.inplementsInterfaces[j]==interfaceName){
interfaceFound=true;
break;
}
}
if(!interfaceFound){
return false;
}
}
return true;
}
var c1=new CompositeImpl();
CheckCompositeImpl(c1);
c1.add();
</script>
</head>
<body>
<h1>New Web Project Page</h1>
</body>
JavaScript_09设计模式(建立接口的方式【二】)属性检测法
最新推荐文章于 2024-09-03 16:10:04 发布