问:为何要用?
普通做法:
1.创建pojo
public class Person { private String name; private int age; private double height; private double weight; public Person(String name) { this.name = name; } public Person(String name, int age) { this.name = name; this.age = age; } public Person(String name, int age, double height) { this.name = name; this.age = age; this.height = height; } public Person(String name, int age, double height, double weight) { this.name = name; this.age = age; this.height = height; this.weight = weight; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public double getHeight() { return height; } public void setHeight(double height) { this.height = height; } public double getWeight() { return weight; } public void setWeight(double weight) { this.weight = weight; } } |
2.创建对象
Person p1 = new Person(); Person p2 = new Person("张三"); Person p3 = new Person("李四", 18); Person p4 = new Person("王五", 21, 180); Person p5 = new Person("赵六", 17, 170, 65.4);
或者使用setName()、setWeight()等set方法
|
这样创建是没问题,
使用构造函数,前提是你自己很熟悉这个Person里面的参数顺序是什么,比如p4对象的21和180,抛开常理,这两个都是数字,你怎么知道那个是年龄那个是身高呢,这样就产生问题,如果数字类型的参数过多,那简直就是灾难,你自己都不知道每个数字代表什么,所以builder模式就很好解决了这个问题。
使用set方法,有可能导致对象不一致
构造模式的使用:
public class Person { private String name; private String sex; private int age; private int weight; private int hight;
/** * 带参构造 * @param name * @param sex * @param age * @param weight * @param hight */ public Person(String name, String sex, int age, int weight, int hight) { super(); this.name = name; this.sex = sex; this.age = age; this.weight = weight; this.hight = hight; }
/** * getter和setter * @return */ public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getSex() { return sex; }
public void setSex(String sex) { this.sex = sex; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public int getWeight() { return weight; }
public void setWeight(int weight) { this.weight = weight; }
public int getHight() { return hight; }
public void setHight(int hight) { this.hight = hight; }
@Override public String toString() { return "Person [name=" + name + ", sex=" + sex + ", age=" + age + ", weight=" + weight + ", hight=" + hight + "]"; }
/** * builder模式 */ static class Builder { private String name; private String sex; private int age; private int weight; private int hight;
public Builder name(String name) { this.name = name; return this; }
public Builder sex(String sex) { this.sex = sex; return this; }
public Builder age(int age) { this.age = age; return this; }
public Builder weight(int weight) { this.weight = weight; return this; }
public Builder hight(int hight) { this.hight = hight; return this; }
public Person build() { return new Person(name, sex, age, weight, hight); } }
public static void main(String[] args) { Person p1= new Person.Builder().age(18).hight(180).name("lx").build(); System.out.println(p1.toString()); } } |
推荐个实用的java学习网站,挺不错,教程一直在更新的 ,好多知识都是在那理解的,讲的通俗易懂好东西分享下 http://how2j.cn?p=29480