边界

程序中的边界就是你的代码和其他代码的分界线。包含两个部分,一个是你是接口提供者,如何提供数据;另一个你是接口使用者,如何使用数据。

1.接口提供者

      写接口给别人使用时,都会使用对象来传递数据,但有些传递数据的对象是存在问题的。例如:List、Map等,如果我们使用这些数据结构返回数据,使用者可以使用这些数据结构的某些方法修改数据,例如List有add、remove等方法,使用者也可以使用,这就产生了风险,使用者可以窥探我们返回的数据。

      一般的解决方法是定义一个新类,包装我们返回的数据。即在类中私有化数据结构,提供公共的某些获取方法。举例如下。

public class ResultClass {
    private List<String> data;

    public String getByIndex(int index) {
        return data.get(index);
    }
}

2. 接口使用者

      很多时候,我们都会遇到,我们要使用的接口还没开始编码或还没完成,但我们又不能一直等。这时,我们就需要先设计出我们需要接口提供的功能,以及自己定义接口返回的数据,后面我们使用接口的地方都会使用我们前面自己定义的类。当接口完成后,我们再写一个适配器类,完成第三方接口和我们已经定义的接口需要完成的功能类的整合。本质上就是使用设计模式中的适配器模式。举例如下。

interface API {
    void sayHello(int type);
}

public class APIImpl implements API {
    APIAdapter api;    

    void sayHello(int type) {
        api = APIAdapter(type);
        api.sayHello();
    }
}

public class APIAdapter implements API {
    ConcreteAPI api;

    APIAdapter(int typeId) {
        if(typeId == 1) {
            api = new APIByEnglish();
        } else if(typeId == 2) {
            api = new APIByChinese();
        }
    
        api = null;
    }    

    void sayHello(int type) {
        api.sayHello();            
    }
}

interface ConcreteAPI {
    void sayHello();
}

public class APIBYEnglish implements ConcreteAPI {
    void sayHello() {
        System.out.println("Hello");
    }
}

public class APIByChinese implements ConcreteAPI {
    void sayHello() {
        System.out.println("你好");
    }
}

总之,这一部分要求我们学会写接口和使用接口。对于使用接口我们一般通过看文档、写测试用例来使用接口,同时如果接口更新后,我们也可以通过接口测试用例来检验接口的正确性。

posted @ 2018-02-12 23:27  锢浪熟阳  阅读(195)  评论(0编辑  收藏  举报