//构建器抽象类,为不同类的实现提供
public interface Builder<T> {
public T build();
} /**
* @描述: 营养表
*/
public class NutritionFacts {
private final int servingSize;// required
private final int servings;// required
private final int calories;// optional
private final int fat;// optional
private final int sodium;// optional
private final int carbohydrate;// optional public static class Builder1 implements Builder<NutritionFacts>{
private final int servingSize;// required 食用分量
private final int servings;// required (食品等的)一份
private int calories;// optional 卡路里
private int fat;// optional
private int sodium;// optional 钠
private int carbohydrate;// optional 碳水化合物;糖类
public Builder1(int servingSize,int servings){
this.servingSize = servingSize;
this.servings = servings;
}
public Builder1 calories(int calories) {
this.calories = calories;
return this;
}
public Builder1 fat(int fat) {
this.fat = fat;
return this;
}
public Builder1 sodium(int sodium) {
this.sodium = sodium;
return this;
}
public Builder1 carbohydrate(int carbohydrate) {
this.carbohydrate = carbohydrate;
return this;
}
@Override
public NutritionFacts build() {
return new NutritionFacts(this);
} } private NutritionFacts(Builder1 builder){
this.servingSize = builder.servingSize;
this.servings = builder.servings;
this.calories = builder.calories;
this.fat = builder.fat;
this.sodium = builder.sodium;
this.carbohydrate = builder.carbohydrate;
} public static void main(String[] args) {
NutritionFacts cocacola = new NutritionFacts.Builder1(, ).calories().sodium().carbohydrate().build();
}
}
为非必须参数设置值,返回Build自身可以把调用链接起来
好处:
、可以用单个builder创建多个对象,builder的参数可以在创建对象期间调整,可以随着对象不同而改变。builder可以自动填充某些域,例如每次创建对象时自动增加序号。
、这是一个很好的抽象工厂(abstract factory)。客户端只要将这样一个builder传给方法,该方法能为客户端创建一个或多个对象。
一个通用类型的bulider
public interface Builder<T>{
public T build();
}

最新文章

  1. Linux监控工具介绍系列&mdash;&mdash;OSWatcher Black Box
  2. Dom4J解析xml文件动态转换为List&lt;Bean&gt;或者Map集合
  3. 初涉SQL Server性能问题(4/4):列出最耗资源的会话
  4. C#学习笔记二: C#类型详解
  5. Windows Phone Emoji
  6. web压力测试的轻量级具体做法
  7. mysql服务器辅助选项
  8. 转:测试用书(出处:cnblog--liangshi)
  9. Play Modules Morphia 1.2.9a 之 Aggregation and Group aggregation
  10. 使用Func&lt;T1, T2, TResult&gt;
  11. 仿Iconfont-阿里巴巴矢量图标库 搜索动画
  12. 离线安装gcc(CentOS7)
  13. ajax jsonp 跨域请求
  14. win10 uwp 绑定多数据
  15. 关于一些常用的linux命令
  16. ELK学习总结(3-3)elk的组合查询
  17. eclipse中的.yml和.properties文件没有绿色叶子图标
  18. python接口自动化测试(三)-requests.post()
  19. Vue、Vuex+Cookie 实现自动登陆 。
  20. 完全卸载jdk

热门文章

  1. Centos7下zabbix部署(五)定义报警媒介-微信
  2. Openstack ceilometer
  3. 纯HTML+CSS写出一颗会飘动的树,有没有惊艳到你呢?
  4. Python的Web编程[0] -&gt; Web客户端[1] -&gt; Web 页面解析
  5. 消息队列集群kafka安装配置
  6. TaobaoVM
  7. SOAP很2的问题
  8. 六. 异常处理7.throw:异常的抛出
  9. 第一讲work(axe)
  10. MySQL四种类型日志:Error Log、General Query Log、Binary Log、Slow Query Log