`
ifoggy
  • 浏览: 23334 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

创建和销毁对象:考虑使用builder

阅读更多

Item2 :当构造方法中的参数列表太多时,考虑使用 builder

         当一个类的构造方法有大量的(可选)参数时,通常考虑的方法有两种,一种是层叠的构造方法模式( telescope constructor ),一种是 JavaBean 模式。

         这两种方法都有各自的缺陷,层叠的构造方法可读性差且容易出错; JavaBean 则会妨碍一个类成为不可变的类。

下面是一个使用 builder 的示例:

  // Builder Pattern
          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 {
                   // 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 carbohydrate = 0;
                   private int sodium = 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 carbohydrate(int val) { 
                        carbohydrate = val;
                        return this; 
                   }

                   public Builder sodium(int val) { 
                        sodium = 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;
               }
          } 

 

可以是用这样的方式来创建这个类的实例:

 

NutritionFacts cocaCola = new NutritionFacts
	.Builder(240, 8)
        .calories(100)
	.sodium(35)
	.carbohydrate(27)
	.build();
 

builder 模式的缺点是需要首先构造一个 Builder 对象,从某些方面来说这也是一种浪费?

1
0
分享到:
评论

相关推荐

    JAVA创建和销毁对象的方法

    在Java编程中,创建和销毁对象是至关重要的操作,它们直接影响到程序的性能和内存管理。本文将深入探讨Java中创建对象的几种方法以及对象的销毁。 首先,我们来看看创建对象的基本方式——构造器。构造器是每个类都...

    c++ builder 创建窗口

    C++ Builder是一个集成开发环境(IDE),专门用于使用C++语言开发Windows应用程序,其强大的VCL(Visual Component Library)库提供了丰富的组件和工具来简化窗口及控件的创建。 动态创建窗口意味着在程序运行时...

    c++多线程的创建挂起执行与销毁

    1. 创建一个基于对话框的应用程序。并增加如图所示控件;分别为3个进度条控件关联三个进度条类型的变量;并在对话框的初始化函数中,设定进度条的范围;为编辑框关联一个整型的变量;为12个按钮添加消息处理函数; 2...

    用C++Builder创建应用程序启动窗口.pdf

    这涉及到添加头文件,创建和初始化窗口对象,显示窗口,然后在适当的时候隐藏和销毁窗口。 **步骤3:** 具体代码实现中,需要在主窗口的构造函数中添加启动窗口的头文件,然后创建启动窗口的对象。在主窗口的`...

    c++ builder基础代码

    5. **内存管理**:C++ Builder支持手动内存管理,需要开发者自行负责对象的创建和销毁,避免内存泄漏。同时,也支持智能指针(如__auto_ptr)来自动管理内存,减少出错的可能。 6. **数据库访问**:C++ Builder提供...

    C++Builder动态对象数组

    - `TList`适用于较小规模的项目,或者对内存使用和性能要求不是特别严格的场合。 - `DynamicArray`适合需要快速访问且不需要频繁扩展数组的场景。 - `std::vector`适用于大型项目,特别是需要高效处理大量数据的...

    C++Builder教学源代码

    4. **内存管理和对象生命周期**:C++Builder中的对象都是动态分配的,理解何时创建和销毁对象,以及如何正确地管理内存,是避免内存泄漏的关键。源代码会包含构造函数、析构函数和其他相关方法,这些都是学习的重点...

    Builder ListView

    7. **内存管理与控件生命周期**:在C++Builder中,需要妥善管理控件的创建和销毁,以防止内存泄漏。"妖哥"的代码会确保ComboBox和Edit控件在适当的时候被创建和释放。 8. **性能优化**:尽管增加了额外的控件,但...

    C++ Builder 6 超详细教学PPT(共34章)

    - IDE内置调试器:使用C++ Builder 6的调试工具定位和修复错误。 11. **程序优化与性能** - 代码优化技巧:提高程序执行效率的方法。 - 多线程编程:理解线程概念,创建和管理线程。 12. **程序打包与发布** -...

    PowerBuilder PFC教程

    使用PFC,开发者不再需要从零开始创建基本的控件和对象,而是可以直接利用PFC提供的组件或者基于这些组件进行扩展。 **PFC的使用要点** 1. **使用PFC对象**:在使用PFC开发时,所有的控件和对象都应基于PFC提供的类...

    PowerBuilder开发教程汇总

    - **对象实例化**:在PowerBuilder中,你可以动态创建和销毁对象,比如在运行时创建窗口或数据窗口对象,这使得程序具有更好的灵活性和可扩展性。 - **事件处理**:PowerBuilder支持事件驱动编程,用户操作如按钮...

    C++资料 C++Builder_ziliao

    2. **面向对象编程(OOP)**:C++Builder支持面向对象编程,包括类的定义、对象的创建与销毁、继承、多态性和封装。理解这些概念对于使用C++Builder进行开发至关重要。 3. **VCL库**:VCL是C++Builder的核心组件,...

    PowerBuilder应用程序中的OLE编程技术

    4. **断开连接并销毁对象**:在完成对OLE对象的操作后,应断开连接并销毁对象,释放占用的资源。这通常通过调用`Quit()`、`DisconnectObject()`和`Destroy`方法实现。 ### 三、具体实例分析 #### 1. 操作Word文档...

    PowerBuilder WIN32 API浏览器API参考 pb 9 开发

    例如,使用API来创建、管理和销毁窗口,或者使用GDI(图形设备接口)API进行复杂的图形绘制。API浏览器中的示例代码可以帮助开发者快速上手。 7. **错误处理和调试**:当API调用失败时,PowerBuilder提供了错误处理...

    PowerBuilder中将数据保存为Word数据

    - 考虑到安全性和性能问题,在生产环境中建议使用自动化的方式关闭Word应用程序,避免用户看到Word界面。 - 由于OLE技术依赖于底层操作系统的支持,因此在不同操作系统版本下可能会遇到兼容性问题,开发者需做好充分...

    C++builder6程序设计教程源代码

    2. **面向对象编程**:类的定义、对象的创建与销毁、继承、多态和封装等概念的实际应用。 3. **VCL组件使用**:如按钮(TButton)、文本框(TEdit)、标签(TLabel)、表格视图(TDBGrid)等的使用,以及组件的属性...

    c++builder 调用MATLAB引擎

    C++的`mxArray`对象必须在不再使用时销毁,以避免内存泄漏。 通过以上步骤,你可以在C++Builder应用中充分利用MATLAB的强大计算功能,为你的用户界面提供高效的后台计算支持。这允许你利用C++Builder的便捷界面设计...

    PowerBuilder编程俱乐部常见问题解答

    - **内存管理**:有效控制对象的创建和销毁,防止内存泄漏。 9. **版本控制与团队协作** - **源码版本控制**:使用Git、SVN等工具进行版本管理和代码协同。 - **工程同步**:在团队开发中,确保成员间代码的一致...

    PowerBuilder9.0教程_pb9_PB9.0_

    - **变量的作用域和生命周期**:掌握变量的生命周期,了解不同类型的变量何时创建和销毁。 **4. 其他关键概念** 除了上述内容,PowerBuilder 9.0还涉及更多关键概念,如事件驱动编程、窗口和菜单的创建、错误处理...

Global site tag (gtag.js) - Google Analytics