项目中有个参数特别多的实体类,每次new一个对象都特别怕弄错,于是就有了下面示例的解决方式
/** * @author quainter */ public class Person { /** * 私有化默认构造方法, * 不希望使用这种方法构造, * 索性就不让别人用, * 算是个好习惯吧 */ private Person(){} //必填实例化参数 private String name; //可选实例化参数 private int sex; private int age; private String favor; //使用静态内部类实例化Person构造器 private Person(Builder builder){ this.name=builder.name; this.age=builder.age; this.sex=builder.sex; this.favor=builder.favor; } /** * 静态内部构造器类(主角) * @author quainter */ public static class Builder{ private String name; private int sex; private int age; private String favor; public Builder(String name){ this.name=name; } public Builder sex(int sex){ this.sex=sex; return this; } public Builder age(int age){ this.age=age; return this; } public Builder favor(String favor){ this.favor=favor; return this; } public Person build(){ return new Person(this); } } /** * getters and setters */ public String getName() { return name; } public void setName(String name) { this.name = name; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getFavor() { return favor; } public void setFavor(String favor) { this.favor = favor; } @Override public String toString() { return "Person [name=" + name + ", sex=" + sex + ", age=" + age + ", favor=" + favor + "]"; } }
public class Test { public static void main(String[] args) { Person person = new Person.Builder("张三").age(17).favor("吃").sex(1).build(); System.out.println(person); } }
运行结果:
OK,每天进步一点点!
相关推荐
Java中的静态内部类详解及代码示例 Java中的静态内部类是一种特殊的内部类,它可以独立于外部类存在,具有自己的生命周期。...在实际开发中,静态内部类可以用于实现Builder模式,提高代码的可读性和可维护性。
在 Java 中,可以使用静态内部类来实现 Builder 模式。在上面的示例代码中,我们可以看到,MapBuilder 和 ListBuilder 都是使用静态内部类来实现的。Builder 类负责构建 Map 或 List 对象,而 MapBuilder 和 ...
这个类通常包含私有构造函数,并且提供一个内部静态类`Builder`。`Builder`类拥有设置各种属性的方法,如`setFontSize()`、`setColor()`和`setPosition()`。 ```java public class MyDialog { private int ...
2. 在`Order`类中创建一个静态内部类`Builder`,用于构建`Order`对象。 3. `Builder`类中通常有一个私有的内部类`OrderState`,它包含了与`Order`类相同的属性,用于存储构建过程中的数据。 4. `Builder`类提供一...
在Java中,通常通过私有构造函数、静态内部类或双重检查锁定实现。单例模式常用于控制资源的访问,如线程池、数据库连接池等。 3. **抽象工厂模式(Abstract Factory Pattern)**:抽象工厂模式提供一个创建一系列...
在工厂模式中,客户类只需要知道工厂,而不需知道具体的实现类。这样,当需要添加新的产品类型时,只需修改工厂类,而无需修改使用这些产品类的客户代码。例如,假设你正在为MM订餐,不论她是喜欢麦当劳的鸡翅还是...
在Java中,可以通过双重检查锁定(Double-Checked Locking)或者静态内部类实现。 - **工厂方法模式**:定义一个创建对象的接口,但让子类决定实例化哪一个类。Java中,通过抽象工厂类和具体实现类实现。 - **抽象...
抽象类持有对实现类的引用,实现类提供具体实现。 #### 2.2 Adapter模式 **定义**: Adapter模式将一个类的接口转换成客户希望的另外一个接口。 **应用场景**: 当希望重用一些现有类但其接口不符合需求时。 **C++...
Java中通常使用双重检查锁定(Double-Check Locking)或者静态内部类来实现单例。 2. 工厂模式:提供一个接口来创建对象,但让子类决定实例化哪个类。Java中的AbstractFactory和SimpleFactory是两种常见实现。 3. ...
Java中的实现通常包括双重检查锁定(Double-Checked Locking)、静态内部类、枚举等方式,防止多线程环境下的并发问题。 3. **Interpreter模式**:该模式主要用于实现表达式,将语言的语法结构映射为类。在Java中,...
在Java中,可以使用枚举、双重检查锁定(DCL)或静态内部类等方式实现。 2. **工厂模式(Factory)**:提供一个接口来创建对象,但让子类决定实例化哪个类。Java中的工厂方法通常通过抽象工厂类或接口来实现。 3. ...
在C#中,可以使用静态内部类或者懒加载实现单例,确保线程安全。工厂模式则抽象出对象的创建过程,使代码更易于维护和扩展。C#中的抽象工厂类或接口可以用来实现这一模式。 观察者模式是一种行为模式,允许对象在...
DesignPatterns单例模式文件中,展示了如何使用C#的静态成员、双重检查锁定等方法来实现线程安全的单例。 3. **备忘录模式 (Memento Pattern)**:备忘录模式用于在不破坏封装性的前提下,捕获一个对象的内部状态,...
Swift中,可以使用结构体或类来实现建造者模式。 5. 原型模式(Prototype):用原型实例指定创建对象的种类,并且通过复制这个原型来创建新的对象。Swift中的`NSCopying`协议可以用来实现浅拷贝或深拷贝。 6. 组合...
在Java中,单例模式可以通过懒汉式(线程不安全)和饿汉式(线程安全)等多种方式实现,还有双重检查锁定(DCL)和静态内部类等线程安全且高效的实现方式。 2. **工厂模式**:提供一个创建对象的接口,但让子类决定...
在给定的示例中,我们看到`MapBuilder`类和它的内部静态类`Builder`共同实现了Builder模式。 1. **Builder类**: - `Builder<T>`内部类是Builder模式的核心,它包含一个`Map, T>`类型的成员变量`map`,用于存储...
- 适配器模式(Adapter):将两个不兼容的接口转换为兼容接口,C++可以使用类或对象组合实现。 - 桥接模式(Bridge):将抽象部分与实现部分分离,使它们可以独立变化。C++中通过继承和组合结合使用。 - 组合模式...