码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript设计模式之一Interface接口

时间:2019-02-21 12:40:04      阅读:816      评论:0      收藏:0      [点我收藏+]

标签:methods   class   bsp   面向   get   设计模式   var   tag   getname   

什么是接口?

接口提供了一种用以说明一个对象应该具有哪些方法和手段。

在面向对象的javascript中,接口有些什么作用呢?既定的一批接口具有自我描述性,并能促进代码重用。接口可以告诉程序员一个类实现了哪些方法,从而帮助其使用这个类。

在C#还是JAVA中都应该面向接口设计我们的程序,在C#和Java中都Interface这样的关键字,但是JavaScript中没有相应的机制,但是Javascript很灵活,我们可以用它的特性去模仿Interface。

 

使用 Interface.js

var Interface = function(name, methods) {
    if(arguments.length != 2) {
        throw new Error("请确认要检查的接口所传的参数是否正确,例如:var Person = new Interface(‘Person‘, [‘GetName‘,‘GetAge‘]);");
    }
    if(methods.length == 0){
        throw new Error("要检查的接口的方法名不能为空");
    }
    this.Name = name;
    this.Method = [];
    for(var i = 0; i < methods.length; i++) {
        if(typeof methods[i] !== string) {
            throw new Error("方法名不是字符串");
        }
        this.Method.push(methods[i]);
    }
}
/*static method in interface*/
Interface.ensureImplement = function(object) {
    if(arguments.length < 2) {
        throw new Error("没有接口或实例");
    }

    for(var i = 1; i < arguments.length; i++) {
        var interface1 = arguments[i];
        if(interface1.constructor !== Interface) {
            throw new Error("参数不是接口");
        }
        for(var j = 0; j < interface1.Method.length; j++) {
            var method = interface1.Method[j];
            if(!object[method] || typeof object[method] !== function) {
                throw new Error("您的实例没有实现接口:\t" + method);
            }
        }
    }
}

 

案例:

// 封装接口的类,假如该类中实现的  add del 2个方法
function Peson(){}
Peson.prototype.add = function(){
    console.log(新增接口);
}
Peson.prototype.del = function(){
    console.log(删除接口);
}

//在你使用该类的方法的时候先去检查你要用到的方法是否存在
var peson = new Peson();
//Interfaces
var check = new Interface(check,[add, del]);
//检查你要用到的方法是否存在,如果你要用的方法没有实现,会抛出错误提示
Interface.ensureImplement(peson, check);
//使用接口
peson.add();
peson.del();

使用es6 的class 也是可以的

class Peson{
    add(){
        console.log(新增接口);
    }
    del(){
        console.log(删除接口);
    }
}
//在你使用该类的方法的时候先去检查你要用到的方法是否存在
var peson = new Peson();
//Interfaces
var check = new Interface(check,[add, del]);
//检查你要用到的方法是否存在,如果你要用的方法没有实现,会抛出错误提示
Interface.ensureImplement(peson, check);
//使用接口
peson.add();
peson.del();

 

JavaScript设计模式之一Interface接口

标签:methods   class   bsp   面向   get   设计模式   var   tag   getname   

原文地址:https://www.cnblogs.com/bruce-gou/p/10411449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!