首页 > 代码库 > 《Javascript设计模式》笔记二 接口

《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);};

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