`
azvf
  • 浏览: 145867 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Build模式

阅读更多
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;
    }
}
分享到:
评论

相关推荐

    23种设计模式java实现

    adapter bridge build chainOfResp command decorator factory iterator mediator observer proxy state visitor 设计模式,java实现,如有纰漏请指正,谢谢

    Bundle_bunlde.zip

    本示例"Bundle_bundle.zip"旨在演示如何处理包含两种不同加载模式的Sprite Atlas:Include in Build模式和非Include in Build模式。 1. **Include in Build模式**: 在Unity中,当一个Sprite Atlas设置为"Include ...

    zhaoqingqing#blog_samplecode#几种方法验证unity是否为development build1

    直观上判断如果是development build模式打包出来的安装包,在游戏的画面的右下角会有development build的水印,且在切换场景也不会消失

    BuildConfig方法二

    在Android开发过程中,`BuildConfig.DEBUG` 是一个非常重要的常量,它用于判断当前应用是否处于调试模式。这个常量的值在构建过程中由Gradle自动生成,通常在开发阶段,`BuildConfig.DEBUG` 应该返回 `true`,以便...

    Windows 10 build 10130引入夜间模式.docx

    ### Windows 10 Build 10130 引入夜间模式 #### 一、概述 随着技术的进步和用户需求的变化,操作系统也在不断地迭代更新,以满足用户对更高效、更舒适的操作体验的需求。其中,夜间模式作为一种重要的用户体验优化...

    android build tools 22.0.0

    3. **支持新的API和语言特性**:随着Android系统版本的更新,Build Tools也会随之支持新的API级别和编程语言特性,如Lollipop(Android 5.0)引入的Material Design和多窗口模式等。 4. **错误检查和警告提升**:新...

    Visual C++ 2015 Build Tools

    3. **使用兼容模式**:部分较新的MSBuild版本可能可以兼容旧的项目格式,通过设置兼容标志或者使用特定命令行参数来使新版本MSBuild能够处理旧版项目文件。 4. **使用第三方工具或脚本**:有些第三方工具如GYP...

    Scan-build静态分析工具

    在debug模式下构建项目,并启用断言功能,可以帮助分析器排除不可达代码路径,显著降低误报率。通过`-v`参数调节冗余输出,甚至将其重定向至日志文件,有助于生成详尽的分析记录,为后续的缺陷追踪提供依据。 #### ...

    build-tools 24.0.3-windows

    【build-tools 24.0.3-windows】是Android开发中的一个重要组件,它属于Android SDK Build Tools的一部分。这个版本的Build Tools专为Windows操作系统设计,提供了构建Android应用程序所需的工具集合。在Android应用...

    Windows 10 build 10147浏览器Edge获暗色显示模式.docx

    ### Windows 10 Build 10147:Edge 浏览器新增暗色显示模式及多项改进 随着正式版 Windows 10 发布日期的临近,越来越多的新特性被逐步披露出来。最近泄露的 Build 10147 版本中,最为引人注目的便是 Edge 浏览器...

    Android Studio SDK Build-tools, revision 20.0.0

    在发布模式下,ProGuard默认启用。 - **zipalign**:此工具用于对APK进行最后一步的优化,确保所有文件在存储时都对齐到4字节边界,以提高设备的内存访问性能。 **2. 安装与使用** 要使用Build-tools 20.0.0,...

    安卓 Build.prop 参数详解

    安卓 Build.prop 参数详解 Build.prop 文件是 Android 系统中一个核心文件,负责定义系统初始的一些参数属性、功能的开放等。通过调整/增加参数可以达到较调系统性能偏重点和附加功能开启的作用。本文将对 Build....

    android studio使用的build tools 23.0.1

    - **Doze模式**:为了提升电池续航,系统在设备长时间未使用时会进入深度睡眠状态。 - **App Links**:允许应用声明对特定URL的归属,以便直接打开相应的应用,而不是浏览器。 - **指纹识别API**:提供了API让应用...

    java7hashmap源码-for-java:java学习笔记

    使用Build模式【构建器】: new A.Build().set.set.build(); Build模式也适用于类层次结构 递归类型参数 /* * 递归类型参数: java 没有self,为了子类能返回正确的类型【即类型为Build的子类】 * */ abstract static...

    FortiGate 100D 防火墙 v6.2.0,build0866

    FortiGate 100D 防火墙 FortiOS v6.2.0,build0866 固件 FortiOS 6.2第一个版本

    BT+BuildOS 刷机

    5. **进入刷机模式**:根据设备的不同,可能需要进入恢复模式(如Android的ClockworkMod Recovery或TeamWin Recovery Project)或下载模式。 6. **清除数据和缓存**:在刷机前,一般需要清除设备的分区数据和缓存,...

    前端开源库-bobril-build

    2. **热模块替换**(Hot Module Replacement):在开发模式下,Bobril Build 可以实现在不刷新整个页面的情况下更新模块,提升开发效率。 3. **自动编译**:Bobril Build 集成了Babel等编译工具,能够将现代...

    前端开源库-qp-build

    5. **开发模式**:使用`qp-build dev`启动开发服务器,实现热重载和实时编译。 ### 三、qp-build与其他构建工具对比 qp-build 相较于其他常见的前端构建工具如Webpack、Gulp、Grunt,可能有以下特点: 1. **轻量...

    绣花园留言本 v1.2 Build 20040523 多用户版

    3、多用户模式手动切换,可启动/关闭新留言本申请模式。4、新注册模式手动切换,可启动/关闭新用户注册,以开放/保护留言本。5、自由留言模式手动切换,可启动/关闭用户不用密码发言功能,也可强制必须使用密码发言...

    C++BUILD下的图像处理算法

    在C++BUILD环境下进行图像处理是一项技术性强且应用广泛的任务。C++BUILD为开发者提供了强大的工具和库,以便实现各种图像处理算法。这些算法通常包括图像的预处理、特征提取、图像变换、图像分析和模式识别等多个...

Global site tag (gtag.js) - Google Analytics