当创建对象需要传入多个参数的时候我们通常会根据参数的数量写不同的构造器,具体如下
public A(int a){}
public A(int a, int b){}
public A(int a, int b, int c){}
根据不同的参数调用不同的构造器,但是当参数多了的时候,这种方式不够灵活,所以会实现动态传参的方法
public A(){}
public void seta(int a){}
public void setb(int b){}
public void setc(int c){}
这种方式提高了传参的可读性,也提高了传参的灵活性,但是会增加代码行数,同时在多线程异步执行的时候导致奇怪的错误。
有没有办法解决呢?既能提高代码可读性,提高参数灵活性,又不会增加代码行数,并保证线程安全呢?
构建器模式登场,先看代码:
public class A {
private int a;
private int b;
private int c;
public static class Builder {
private int a;
private int b;
private int c;
public Builder(){}
public Builder seta(int a) { this.a = a; return this}
public Builder setb(int b) { this.b = b; return this}
public Builder setc(int c) { this.c = c; return this}
public A build() { return new A(this)}
}
private A(Builder builder) {
this.a = builder.a;
this.b = builder.b;
this.c = builder.c;
}
}
调用构造方法:
A a = new A.Builder().seta(1).setb(2).setc(3).build();
这样就解决了以上所说的问题,但是他的缺点同样也是存在的,就是:
1.构造器写起来很复杂
2.创建对象开销比较大
所以构建器模式只适用于需要传入很多种情况参数的时候,比如大于4种参数的配合,才比较划算。
而且值得注意的是:最好在类的设计之初就考虑是否使用构建器,否则日后扩展起来新构建器旧构造器一起用维护起来不方便。
相关推荐
在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成。...我们常常会面临编写一个这样的实现类(假设类名叫DoDoContact),这个类拥有多个构造函数,
在编程中,我们经常使用构造函数或set方法来创建对象,但当对象的构造过程变得复杂,尤其是涉及到多个可选参数时,传统的构造方式可能会导致代码可读性和维护性降低。这时,建造者模式就显得尤为重要。 构造函数...
总结起来,FreeBuilder是Java开发中的一个强大工具,它利用Builder模式提高了代码的可读性和维护性,尤其适用于处理有多个构造参数的复杂类。通过自动化的代码生成,开发者可以专注于业务逻辑,而不用花费过多精力在...
4. **避免了构造函数的臃肿**:即使产品有很多配置项,也可以通过Builder模式轻松管理而不必担心构造函数参数过多的问题。 #### 六、总结 Builder设计模式是一种非常实用的设计模式,尤其适用于需要构建复杂对象的...
这种方法通过创建一系列的构造函数,每个构造函数都比前一个多一个或多个参数,以满足不同需求。这种方式的问题在于,当类的属性数量增加时,需要创建更多的构造函数,导致代码维护困难。例如,`NutritionFacts`类...
在Android开发中,Builder模式可以提高代码的可读性和可维护性,特别是在处理大量可选参数时,比使用长链式构造函数或大量重载构造函数更为优雅。通过阅读和理解`builderTest`项目中的代码,你可以深入掌握Builder...
第二种是JavaBean方式,通过setter方法逐个设置属性,虽然避免了构造函数的混乱,但增加了代码量,并且如果需要创建一个完整的对象,仍然需要调用多个方法,可读性较差。 Builder模式提供了解决这些问题的方案。它...
在Java中应用建造者模式,可以帮助我们更好地控制对象的创建,特别是在对象的构造过程复杂时,避免了在构造函数中传递大量参数的尴尬。 建造者模式的核心结构包括四个部分: 1. **产品(Product)**:这是要构建的...
当设计类的构造函数或静态工厂具有多个参数时,Builder 模式是一个不错的选择。—— Effective Java,第二版,第39页背景在 Java 中实现 Builder 模式容易出错和重复。即使是一个简单的四字段类,最基本的构建器 ...
在Java中,Builder模式通常用来处理那些具有大量可选参数的对象,避免了使用长参数列表或者复杂的构造函数。 在Java 8之前,Builder模式的实现通常涉及以下步骤: 1. 定义一个`Order`类,包含多个属性如`code`、`...
最后,建造者模式关注的是对象的构建过程,它将复杂的构建过程分解为多个步骤,使得构建不同类型的复杂对象更加容易。建造者模式可以确保建造过程的顺序,并且隐藏了产品的内部构造细节。比如,用不同的方言对MM说...
3. **避免复杂参数列表**:如果构造函数需要大量参数,使用建造者模式可以使代码更清晰,避免了"长参数列表"问题。 总结来说,Java的设计模式——建造者模式在Android开发中扮演着重要角色,它帮助我们构造复杂对象...
通过使用创建者模式,我们可以避免在构造函数中传递大量参数,或者避免在代码中充斥着大量的条件判断来处理不同的构建路径。 创建者模式的核心组成部分包括: 1. **产品角色(Product)**:这是要创建的复杂对象,...
当设计类的构造函数或静态工厂将具有多个参数的类时,Builder模式是一个不错的选择。 —有效的Java,第二版,第39页 背景 在Java中实现非常繁琐,容易出错且重复。 谁没有看过一个由十个参数组成的构造函数,对这个...
生成泛型的简易Builder主要是为了提高代码的可读性和可维护性,同时避免了传统构造函数参数过多导致的“长参数列表”问题。本文将深入探讨如何在Java(Android的主要编程语言)中实现泛型的Builder模式。 首先,让...
在Java中,Builder模式常用于创建复杂的对象,通过分步构建各个部分,最后组合成完整对象,避免了构造函数中参数过多的问题。在给定的示例中,我们看到`MapBuilder`类和它的内部静态类`Builder`共同实现了Builder...
当应用程序需要使用更多的字体时,可以在使用了某个字体号输出内容后使用PrintDefineFont()函数将该字体号对应的字体更换为其它字体。 -----------------------------------------------------------------------...
在实际应用中,当对象的构造过程过于复杂,涉及到多个属性或者子对象的组合时,直接通过构造函数创建可能会导致代码混乱、难以维护,并且灵活性降低。建造者模式通过将复杂对象的构造过程封装到一个独立的“建造者”...
建造者模式(Builder Pattern)是设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,而无需暴露其构造过程。...在处理需要大量参数的构造函数或者需要按照特定顺序组装对象的场景下,建造者模式尤为适用。
- **解决办法**: 分割大文本为多个部分,或使用更适合处理大文本的控件。 **3.9 不要使用OnCreate和OnDestroy,而要使用C++的构造函数和析构函数** - **问题描述**: 使用`OnCreate`和`OnDestroy`处理控件的生命...