建造者模式也属于创建型模式,它提供了一种创建对象的最佳方式。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。用户只需要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)。
抽象的建造者类
public abstract class Builder {
abstract void buildA();
abstract void buildB();
abstract void buildC();
abstract void buildD();
abstract Product getProduct();
}
产品类
public class Product {
private String buildA;
private String buildB;
private String buildC;
private String buildD;
public String getBuildA() {
return buildA;
}
public void setBuildA(String buildA) {
this.buildA = buildA;
}
public String getBuildB() {
return buildB;
}
public void setBuildB(String buildB) {
this.buildB = buildB;
}
public String getBuildC() {
return buildC;
}
public void setBuildC(String buildC) {
this.buildC = buildC;
}
public String getBuildD() {
return buildD;
}
public void setBuildD(String buildD) {
this.buildD = buildD;
}
@Override
public String toString() {
return "Product{" +
"buildA=‘" + buildA + ‘\‘‘ +
", buildB=‘" + buildB + ‘\‘‘ +
", buildC=‘" + buildC + ‘\‘‘ +
", buildD=‘" + buildD + ‘\‘‘ +
‘}‘;
}
}
具体的建造者类
public class Worker extends Builder{
private Product product;
public Worker() {
this.product = new Product();
}
@Override
void buildA() {
product.setBuildA("地基");
System.out.println("地基");
}
@Override
void buildB() {
product.setBuildB("钢筋工程");
System.out.println("钢筋工程");
}
@Override
void buildC() {
product.setBuildC("铺电线");
System.out.println("铺电线");
}
@Override
void buildD() {
product.setBuildD("粉刷");
System.out.println("粉刷");
}
@Override
Product getProduct() {
return product;
}
}
指挥类
public class Director {
public Product build(Builder builder){
builder.buildA();
builder.buildB();
builder.buildC();
builder.buildD();
return builder.getProduct();
}
}
测试类
public class TestBuilder {
public static void main(String[] args) {
Director director = new Director();
Product build = director.build(new Worker());
System.out.println(build.toString());
}
}
运行结果
地基
钢筋工程
铺电线
粉刷
Product{buildA=‘地基‘, buildB=‘钢筋工程‘, buildC=‘铺电线‘, buildD=‘粉刷‘}
抽象的建造者类
public abstract class Builder {
abstract Builder buildA(String msg);
abstract Builder buildB(String msg);
abstract Builder buildC(String msg);
abstract Builder buildD(String msg);
abstract Product getProduct();
}
产品类
public class Product {
private String buildA = "汉堡";
private String buildB = "薯条";
private String buildC = "可乐";
private String buildD = "西瓜";
public String getBuildA() {
return buildA;
}
public void setBuildA(String buildA) {
this.buildA = buildA;
}
public String getBuildB() {
return buildB;
}
public void setBuildB(String buildB) {
this.buildB = buildB;
}
public String getBuildC() {
return buildC;
}
public void setBuildC(String buildC) {
this.buildC = buildC;
}
public String getBuildD() {
return buildD;
}
public void setBuildD(String buildD) {
this.buildD = buildD;
}
@Override
public String toString() {
return "Product{" +
"buildA=‘" + buildA + ‘\‘‘ +
", buildB=‘" + buildB + ‘\‘‘ +
", buildC=‘" + buildC + ‘\‘‘ +
", buildD=‘" + buildD + ‘\‘‘ +
‘}‘;
}
}
具体的建造者类
public class Worker extends Builder {
private Product product;
public Worker(){
product = new Product();
}
@Override
Builder buildA(String msg) {
product.setBuildA(msg);
return this;
}
@Override
Builder buildB(String msg) {
product.setBuildB(msg);
return this;
}
@Override
Builder buildC(String msg) {
product.setBuildC(msg);
return this;
}
@Override
Builder buildD(String msg) {
product.setBuildD(msg);
return this;
}
@Override
Product getProduct() {
return product;
}
}
测试类
public class TestBuilder {
public static void main(String[] args) {
Worker worker = new Worker();
Product product = worker.buildA("嫩牛五方").getProduct();
System.out.println(product.toString());
}
}
运行结果
Product{buildA=‘嫩牛五方‘, buildB=‘薯条‘, buildC=‘可乐‘, buildD=‘西瓜‘}
原文:https://www.cnblogs.com/baihan/p/13112150.html