package effective;
/**
* @{# natureFcit.java Create on 2013-6-18 下午5:29:06 description:
* @author SHY
* @version 1.0
*/
// Builder Pattern
public class NutritionFacts {
public static void main(String[] args) {
/*
* 从下面的使用中可以看出,Builder模式模拟了具名参数,可以提高代码的可读性和维护性,降低使用的风险。
*
* 不过,Builder模式也有显著的缺点,最明显的就是每次创建对象的时候都要额外的创建一个builder对象,
* 这个对于注重性能的系统是一个问题。
*
* 另外,Builder模式从形式上也要比一般的构造函数复杂。所以Joshua建议除非构造函数的
* 参数很多,而且大部分都是可选的,否则首先还是不要考虑Builder模式。
*
* 还有,java中使用链式调用方法,很酷
*/
NutritionFacts cocaCola = new NutritionFacts.Builder(240, 8)
.calories(100).sodium(30).carbohydrate(29).build();
}
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 Builder {
// Required parameters
private final int servingSize;
private final int servings;
// Optional parameters - initialized to default values
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;
}
public Builder calories(int val) {
calories = val;
return this;
}
public Builder fat(int val) {
fat = val;
return this;
}
public Builder sodium(int val) {
sodium = val;
return this;
}
public Builder carbohydrate(int val) {
carbohydrate = val;
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;
}
}
分享到:
相关推荐
BUILDER模式 C++实现
adapter bridge build chainOfResp command decorator factory iterator mediator observer proxy state visitor 设计模式,java实现,如有纰漏请指正,谢谢
http://blog.csdn.net/column/details/xing-designpattern.html
直观上判断如果是development build模式打包出来的安装包,在游戏的画面的右下角会有development build的水印,且在切换场景也不会消失
一个加载 Include in Build模式和非include in build模式的spriteatlas的预设如何加载的例子
Windows 10 build 10130引入夜间模式.docx
Laravel开发-schema-build 表模式的数据库,将输出函数输入到文件中
建造模式 Build 生成器模式 设计模式
Windows 10 build 10147浏览器Edge获暗色显示模式.docx
使用Build模式【构建器】: new A.Build().set.set.build(); Build模式也适用于类层次结构 递归类型参数 /* * 递归类型参数: java 没有self,为了子类能返回正确的类型【即类型为Build的子类】 * */ abstract static...
FortiGate 100D 防火墙 FortiOS v6.2.0,build0866 固件 FortiOS 6.2第一个版本
NULL 博文链接:https://jiachenmianyu.iteye.com/blog/717898
摩托罗拉专用的对讲机编程软件,CPS10.0,BUILD507 ,无需密码即可使用
3、多用户模式手动切换,可启动/关闭新留言本申请模式。4、新注册模式手动切换,可启动/关闭新用户注册,以开放/保护留言本。5、自由留言模式手动切换,可启动/关闭用户不用密码发言功能,也可强制必须使用密码发言...
安卓手机端app开发源码,某个其中框架,详细需要后续上传XY-MBD07A 模块是基于赛普拉斯@CYPRESS(原美国博通@Broadcom)蓝 牙 4.2 LE+BR/EDR 双模芯片,集成...也可做蓝牙主模式(Host),连接 SPP、HID 和 BLE 等设备
建立测试buildtest是一个HPC测试框架,可帮助设施更有效地编写验收测试。 Buildtest为在编写称为Buildspecs的工具提供了便利的框架,并且buildtest处理如何创建测试脚本并在系统上运行测试。 Buildtest利用来指定...
设计模式-策略模式-c++版 压缩包中有build好的程序和工程设计到的所有类的源码,还有一个Uml类图
采用Asp三层模式开发,利用类(Class),绶存(Cache)和无排序分页可以支持100万以上数据记录 用户名:Snowboy 密码:Snowboy
软件专为个人用户所设计,可以方便的的为用户提供档案传输功能,并支持下载和上传、虚拟文件系统、HTML模版、带宽控制、简单模式与专家模式、LOG记录、完全可控连接、账户管理、动态域名更新等诸多功能。需要的朋友...
策略模式在实际项目中的应用二,该测试demo为普通项目,导入build path一下lib目录下的jar包,然后运行测试类即可在控制台看到测试结果