内部类实现配置的构造Builder

内部类有一个作用是你的功能某个部分有点复杂,需要另一个类来完成,但是你又不希望让外部知道这个类的存在,那么你就可以把这个类声明为一个私有的内部类。第二个作用,比如你的框架或者功能类需要一个配置(config)作为其参数,那么你需要一个builder来构建这个config以达到控制其构造规范的目的。你不想让其他人去调用这个config的构造函数但是你自己要用到怎么办呢,可以把这个builder声明为内部类,直接看代码

public final class BinaryClientConfig {
  private String clientName;
  private AddressPair remoteAddress;

  private BinaryClientConfig(BinaryClientConfigBuilder builder) {
    this.clientName = builder.clientName;
    if (builder.remoteAddress == null) {
      throw new NullPointerException("remoteAddress");
    }
    this.remoteAddress = builder.remoteAddress;
  }
  public String getClientName() {
    return this.clientName;
  }
  public AddressPair getRemoteAddress() {
    return remoteAddress;
  }

  public static class BinaryClientConfigBuilder {
    private String clientName;
    private AddressPair remoteAddress;

    public BinaryClientConfigBuilder() {
      this.clientName = "Binary-Client";
      this.remoteAddress = new AddressPair("127.0.0.1", 8888);
    }
    public BinaryClientConfig build() {
      return new BinaryClientConfig(this);
    }

    public BinaryClientConfigBuilder clientName(String clientName) {
      this.clientName = clientName;
      return this;
    }
    public BinaryClientConfigBuilder remoteAddress(AddressPair remoteAddress) {
      this.remoteAddress = remoteAddress;
      return this;
    }
  }
}

 

在调用的时候可以使用链式调用,很流畅的建造配置

BinaryClientConfig config = new BinaryClientConfig.BinaryClientConfigBuilder().clientName("limitart").remoteAddress(new AddressPair("127.0.0.1", 8888)).build();

 

conifg本类对于成员变量只开放get的接口,这样就相当于只读了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注