静态工厂方法 代替 构造器
优点:1.方法有名字,可以区分各种构造器
2.可以返回任何子类型
3.每次调用都返回相同的对象
即,可以根据需求返回相应的对象,可以做各种更改
构建器 代替 构造器
优点:1.适合多个参数
缺点:类的结构复杂,性能稍有影响
内部类 代替 外部类
优点:结构清晰,这个内部类只对外部类有用
私有化构造器
优点:不能被随便实例化
缺点:不能被继承
eg:
public class Student { private String name; private int age; private static Builder builder = new Builder(); private Student(String name, int age) { this.name = name; this.age = age; } public static Builder getBuilder() { return builder; } static class Builder { private String name; private int age; public Builder(String name, int age) { this.name = name; this.age = age; } public Builder() { } public Builder buildName(String name) { this.name = name; return this; } public Builder builderAge(int age) { this.age = age; return this; } public Builder builder() { return new Builder(name, age); } } @Override public String toString() { return MoreObjects.toStringHelper(this.getClass()) .add("name", name) .add("age", age) .addValue(111l) .toString(); } public static void main(String[] args) { Student.Builder builder = Student.getBuilder(); Builder b = builder.buildName("lili") .builderAge(18) .builder(); System.out.println(b); } }