`
xiemingmei
  • 浏览: 208135 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Protobuf只读数据类设计原理

阅读更多
Protobuf使用protoc生成的java类, 这个类一旦创建了对象,该对象就是只读的,不能修改它的任何属性,也就是说这个类是只读类。Protobuf使用builder来构建对象,构建过程中为设置对象属性值,设置完后,builder本次任务已经完结了。


据下面的例子来说明一下:


用户类:

public class User {

    private String userName;

    private int age;

    public boolean hasUserName(){

      ...

    }

    public boolean hasAge(){

...

   }

   public String getUserName(){

     return userName

  }  

  public int getAge(){

  return age;

}

   

  public static Builder newBuilder() {

    return new Builder();

  }

}

静态内部类,使用User内部类来修改User的字段,而外部其他类没权限直接修改User的字段:

public static class User.Builder {

    private String _userName;

    private int _age;

   public String getUserName(){

     return _userName

  }  

  public int getAge(){

  return _age;

}

   public User.Builder setUserName(String userName){

this._userName = userName;

return this;

  }  

  public User.Builder setAge(int age){

  this._age = age;

return this;

}


public User build() {

    User user = new User();

    user.userName = this._userName;

    user.age = this._age;

    

     //清除所有字段

    this._userName = null;

    this._age = 0;

return user;

}

}

使用这两个类:

User.Builder builder = User.newBuilder();

builder.setUserName(“谢明媚").setAge(24);

User user = builder.build();

builder.setUserName("谢铭");

System.out.println(user.getUserName());




输出结果为:

谢明媚


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics