package com.z.builder;
//抽象方法,建造者
abstract class Builder{
abstract void builderA();
abstract void builderB();
abstract void builderC();
abstract void builderD();
abstract Product getProduct();
}
//产品
class Product{
private String builderA;
private String builderB;
private String builderC;
private String builderD;
public String getBuilderA() {
return builderA;
}
public void setBuilderA(String builderA) {
this.builderA = builderA;
}
public String getBuilderB() {
return builderB;
}
public void setBuilderB(String builderB) {
this.builderB = builderB;
}
public String getBuilderC() {
return builderC;
}
public void setBuilderC(String builderC) {
this.builderC = builderC;
}
public String getBuilderD() {
return builderD;
}
public void setBuilderD(String builderD) {
this.builderD = builderD;
}
@Override
public String toString() {
return "Product [builderA=" + builderA + ", builderB=" + builderB
+ ", builderC=" + builderC + ", builderD=" + builderD + "]";
}
}
//继承抽象方法,具体建造者
class ConcreteBuilder extends Builder{
private Product product;
public ConcreteBuilder() {
//里面引进Product的属性
product = new Product();
}
@Override
void builderA() {
product.setBuilderA("地基");
}
@Override
void builderB() {
product.setBuilderB("墙面");
}
@Override
void builderC() {
product.setBuilderC("屋顶");
}
@Override
void builderD() {
product.setBuilderD("粉刷");
}
@Override
Product getProduct() {
return product;
}
}
//指挥者
class Director{
//在这里面实例化了
public Product create(Builder builder){
builder.builderA();
builder.builderB();
builder.builderC();
builder.builderD();
return builder.getProduct();
}
}
//测试
public class Test {
public static void main(String[] args) {
Director director=new Director();
Product create=director.create(new ConcreteBuilder());
System.out.println(create.toString());
}
}