【Practical API Design学习笔记】谨慎使用第三方API

    我们在设计API时,很可能需要使用第三方API,并将其暴露出去。但是这样做会有危险。当第三方API变化时,我们设计的API也会变化,因为是直接将第三方API暴露出去的。

    例如:假设String类定义如下:

public final class String {
  private final char[] chars;
  public String(char[] chars) {
    this.chars = chars.clone();
  }
  public int length() {
    return chars.length;
  }
  public char charAt(int i) {
    return chars[i];
  }
}
    我们使用它:

Query query = new Query();
String reply = query.computeReply();
assertEquals("Length is correct", 5, reply.length());
    假设String类的length方法变成了getSize()方法,那么我们设计的API接口就变了。

    对于以上问题,有三种解决方案:

    1、接受它,允许我们的API随着使用并暴露出去的第三方API变化而变化;

    2、拒绝它,要求你需要有权利阻止第三方API发生变化;

    3、包装它,我们的API在使用第三方API时,将其包装一层。

    例如:

public final class Query {
  public static final class Sequence {
    private String data;
    Sequence(String data) {
      this.data = data;
    }
    public int length() {
      return data.length();
    }
    public char charAt(int i) {
      return data.charAt(i);
    }
  }
  public Sequence computeReply() {
    char[] hello = { 'H', 'e', 'l', 'l', 'o' };
    return new Sequence(new String(hello));
  }
}
当第三方API的length()方法变成getSize()方法时:

public final class Query {
  public static final class Sequence {
    private String data;
    Sequence(String data) {
      this.data = data;
    }
    public int length() {
      return data.getSize();
    }
    public char charAt(int i) {
      return data.charAt(i);
    }
  }
  public Sequence computeReply() {
    char[] hello = { 'H', 'e', 'l', 'l', 'o' };
    return new Sequence(new String(hello));
  }
}

    

转载于:https://my.oschina.net/tingzi/blog/132613

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值