学习总结:java构建器模式
来源:互联网 发布:美国西密歇根大学 知乎 编辑:程序博客网 时间:2024/06/04 00:59
如何构造有大量可选参数的对象?
重叠构造器:可行,但构造函数太多,代码很难编写,切难以阅读。
javaBeans模式(调用一个无参构造器创建对象,调用setter方法设置每个参数):弥补重叠构造器的不足,但是构造时会产生不一致的状态(一个只设置了A属性,另一个只设置了B属性,不能确定必选参数都设置了),造成调试困难;并且把类变成可变的,设置一个属性后,还能再设置一遍来改变原属性。
Java构建器:不直接生成想要的对象,利用必要的参数调用构造器,得到builder对象,在builder对象上调用类似setter方法,设置每个可选参数,最后,调用无参的build方法生成不可变的对象,这个build是它构建的类的静态成员类。
public class NutritionFacts {//营养事实//必选的private final int servingSize;private final int servings;//可选的private final int calories;private final int fat;private final int sodium;private final int carbohydrate;public static class Builder{private final int servingSize;private final int servings;private int calories=0;private int fat=0;private int sodium=0;private int carbohydrate=0;/* * 不直接生成想要的对象,利用必要的参数调用构造器 */public Builder(int servingSize,int servings){this.servingSize=servingSize;this.servings=servings;}/* * 调用类似setter方法,设置每个可选参数 */public Builder calories(int cal){calories=cal;return this;}public Builder fat(int fa){fat=fa;return this;}public Builder sodium(int so){sodium=so;return this;}public Builder carbohydrate(int car){carbohydrate=car;return this;}/* * 生成不可变对象 */public NutritionFacts build(){return new NutritionFacts(this);}}private NutritionFacts(Builder builder){servingSize=builder.servingSize;servings=builder.servings;calories=builder.calories;fat=builder.fat;sodium=builder.sodium;carbohydrate=builder.carbohydrate;}}
调用方法:NutritionFacts nur=new NutritionFacts.Builder(7,12).calories(5).fat(9).sodium(23).carbohydrate(88).build();
阅读全文
0 0
- 学习总结:java构建器模式
- Java构建器模式
- java构建器模式
- java设计模式学习笔记-构建模式
- JAVA构建器Builder模式
- Java-构建器模式(Buider模式)
- java 设计模式:构建器模式
- JAVA设计模式学习总结
- java观察者模式学习总结
- Java设计模式学习总结
- java - 设计模式学习总结
- Java - 设计模式学习总结
- JAVA 设计模式学习总结
- java访问者模式学习总结
- java构建模式
- Java总结:构建器的调用顺序
- Java-设计模式学习笔记-总结
- Java基础17:设计模式学习总结
- Redis Cluster:Too many Cluster redirections异常
- div 不能占满整个页面
- NYOJ975
- 对Fragment的封装和fragment的显示隐藏回退栈管理
- C++ 基础知识一
- 学习总结:java构建器模式
- 类和对象与继承
- H
- UVALive
- 类型转换
- c到c++的过渡
- 图片加载框架Picasso和Glide
- hdu 4734 【数位DP】
- C++ 多态性