重叠构造器模式
——不能很好地扩展:
public class Person {private String name; // 必填private int age; // 必填private String address; // 可选private String email; // 可选private String phone; // 可选private String occupation; // 可选// 无参构造方法public Person(){}public Person(String name, int age) {this.name = name;this.age = age;}public Person(String name, int age, String address) {this(name, age, adress, null);}public Person(String name, int age, String address, String email) {this(name, age, adress, email, null);}public Person(String name, int age, String address, String email, String phone) {this(name, age, adress, email, phone, null);}public Person(String name, int age, String address, String email, String phone, String occupation) {this.name = name;this.age = age;this.address = address;this.email = email;this.phone = phone;this.occupation = occupation;}// Getters and setters
}
JavaBeans模式
——允许不一致性,要求可变性:
public class Person {private String name; // 必填private int age; // 必填private String address; // 可选private String email; // 可选private String phone; // 可选private String occupation; // 可选// 无参构造方法public Person(){}// setterspublic void setName (String name) { this.name = name;}public void setAge(String age) { this.age = age;}public void setAddress (String address) { this.address = address;}public void setEmail (String email) { this.email = email;}public void setPhone (String phone) { this.phone = phone;}public void setOccupation (String occupation) { this.occupation = occupation;}
}
Person person = new Person();
person.setName("name");
person.setAge("age");
person.setAddress("address");
person.setEmail("email");
person.setPhone("phone");
person.setOccupation ("occupation");
生成器模式:
public class Person {private String name; // 必填private int age; // 必填private String address; // 可选private String email; // 可选private String phone; // 可选private String occupation; // 可选private Person(Builder builder) {this.name = builder.name;this.age = builder.age;this.address = builder.address;this.email = builder.email;this.phone = builder.phone;this.occupation = builder.occupation;}// Getterspublic static class Builder {private String name;private int age;private String address;private String email;private String phone;private String occupation;public Builder(String name, int age) {this.name = name;this.age = age;}public Builder address(String address) {this.address = address;return this;}public Builder email(String email) {this.email = email;return this;}public Builder phone(String phone) {this.phone = phone;return this;}public Builder occupation(String occupation) {this.occupation = occupation;return this;}public Person build() {return new Person(this);}}
}
使用示例:
Person person = new Person.Builder("John", 25).address("123 Main St").email("john@example.com").build();
在上述示例中,Person
类使用了一个内部的 Builder
类来构建对象。必填的参数通过构造函数传入,而可选的参数则通过链式调用建造者的方法进行设置。最后,通过调用 build()
方法来创建最终的 Person
对象。
使用生成器模式,你可以根据需要选择要设置的可选参数,而不必担心参数顺序或构造函数重载的问题。这种模式提供了更灵活和可扩展的方式来创建对象,并且可以轻松地处理不同参数组合的情况。