《Javascript设计模式》笔记二 接口

在Javascript当中模仿接口的方法有三种:注释法,属性检查法和鸭式变形法。三者结合令人满意。

1.注释法

/*
interface Composite{
    function add(child){};
    function remove(child){};
    function getChild(index){};
}
interface FormItem{
    function save(){}
}
*/

//用注释法模仿接口

var Com = function(id,method,action){}

Com.prototype.add = function(child){};

Com.prototype.remove = function(child){};

Com.prototype.getChild = function(index){};

Com.prototype.save = function(){}

注释法缺点:没有检查,也不会抛出错误,靠自觉。

注释法优点:易于实现,重用性。

2.属性检查法

/*
interface Composite{
    function add(child){};
    function remove(child){};
    function getChild(index){};
}
interface FormItem{
    function save(){}
}
*/

//用属性检查法模仿接口
var Composite = function(id,meothod,action){
    this.implementsInterfaces = [‘Composite‘,‘FormItem‘];
};

function addForm(formInstance){
    if(!implements(formInstance,‘Composite‘,‘FormItem‘)){
        throw new Error(‘Object does not implement a required interface‘);
    }
}

function implements(object){
    for(var i = 1; i < arguments.length; i++){
        var interfaceName = arguments[i];
        var interfaceFound = false;
        for(var j = 0; j < object.implementsInterfaces.length; j++){
            if(object.implementsInterfaces[j] == interfaceName){
                interfaceFound = true;
                break;
            }
            
        }
        if(!interfaceFound){
            return false;
        }
    }
    return true;
}

3.填鸭变型法

var Composite = new Interface(‘Composite‘,[‘add‘,‘remove‘,‘getChild‘]);

var FormItem = new Interface(‘FormItem‘,[‘save‘]); 

var CompositeForm = function (id,method,action){ 

}; 

 function addForm () {
        ensureImplements(formInstance,Composite,FormItem);
};

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。