原博主地址:(https://blog.csdn.net/LoveLion/article/details/17517213)
建造者模式是唯一不需要产品建子类的创建型(当然,你要用子类表示也可以)
由建造者建子类,建造者父类只是要求必须要设置哪些产品属性,由子类去实现。
当然Director(指挥者)是可以有也可以无的,放在建造者中去实现也可以啊。
钩子方法,定义一个钩子方法,在创建对象时,通过钩子判断,可以确定哪些属性可以不设置。
建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。
//产品
public class Student {
private String name;
private String age;
private String horse;
public String getHorse() {
return horse;
}
public void setHorse(String horse) {
this.horse = horse;
}
public String getName() {
return name;
}
public String getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(String age) {
this.age = age;
}
}
//建造者抽象类
public abstract class Builder {
protected Student student = new Student();
public abstract void setName();
public abstract void setAge();
public abstract void setHorse();
public abstract boolean isHaveHorse();
public Student getStudent() {
setAge();
setName();
if(isHaveHorse()) {
setHorse();//如果没有马,就不设置了
}
return student;
}
}
//建造者实现类A
public class AStudentBuilder extends Builder{
public void setName() {
student.setAge("18");
}
public void setAge() {
student.setName("张飞");
}
@Override
public void setHorse() {
student.setHorse("的卢");
}
@Override
public boolean isHaveHorse() {
return true;
}
}
//建造者实现类B
public class BStudentBuilder extends Builder{
public void setName() {
student.setAge("20");
}
public void setAge() {
student.setName("典韦");
}
@Override
public void setHorse() {
}
@Override
public boolean isHaveHorse() {
return false;
}
}