zoukankan      html  css  js  c++  java
  • JavaScript设计模式之一Interface接口

    什么是接口?

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

    在面向对象的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("您的实例没有实现接口:	" + 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();
  • 相关阅读:
    mysql添加索引
    【最短路】道路重建 @upcexam5797
    【数论&想法题】小C的问题 @"科林明伦杯"哈尔滨理工大学第八届程序设计竞赛
    【最大公约数&链表】权值 @upcexam5921
    【组合数】微信群 @upcexam6016
    【二维树状数组】计数问题 @JSOI2009/upcexam5911
    【组合&取补集】数三角形 @CQOI2014/BZOJ3505/upcexam3843
    【LCA&倍增】货物运输 @upcexam5909
    【组合数】[NOIP2011]选择客栈[c++]
    【模拟】[NOIP2011]铺地毯[c++]
  • 原文地址:https://www.cnblogs.com/bruce-gou/p/10411449.html
Copyright © 2011-2022 走看看