设计模式5——建造者模式
设计模式5——建造者模式


第一种方式(建造者模式):

package com.ghl.builder.demo01;
/**
* @ProjectName DesignPattern
* @ClassName Builder
* @Date 2020/8/26 17:11
* @Author gaohengli
* @Version 1.0
*/
//建造者模式
//抽象的建造者:方法
public abstract class Builder {
abstract void buildA();//地基
abstract void buildB();//钢筋工程
abstract void buildC();//铺电线
abstract void buildD();//粉刷
//完工,得到产品
abstract Product getProduct();
}
package com.ghl.builder.demo01;
/**
* @ProjectName DesignPattern
* @ClassName Product
* @Date 2020/8/26 17:16
* @Author gaohengli
* @Version 1.0
*/
//产品:房子
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 + '\'' +
'}';
}
}
package com.ghl.builder.demo01;
/**
* @ProjectName DesignPattern
* @ClassName Worker
* @Date 2020/8/26 21:20
* @Author gaohengli
* @Version 1.0
*/
//具体的建造者:工人
public class Worker extends Builder {
Product product;
public Worker() {
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;
}
}
package com.ghl.builder.demo01;
/**
* @ProjectName DesignPattern
* @ClassName Director
* @Date 2020/8/26 21:27
* @Author gaohengli
* @Version 1.0
*/
//指挥:核心。负责指挥构建一个工程,工程如何构建,有它决定
public class Director {
//指挥工人按照顺序建房子
public Product build(Builder builder){
builder.buildA();
builder.buildB();
builder.buildC();
builder.buildD();
return builder.getProduct();
}
}
package com.ghl.builder.demo01;
/**
* @ProjectName DesignPattern
* @ClassName Test
* @Date 2020/8/26 21:32
* @Author gaohengli
* @Version 1.0
*/
//测试建造者模式
public class Test {
public static void main(String[] args) {
//指挥
Director director = new Director();
//指挥具体的工人完成产品
Product build = director.build(new Worker());
System.out.println(build.toString());
}
}

第二种方式:

package com.ghl.builder.demo02;
/**
* @ProjectName DesignPattern
* @ClassName Builder
* @Date 2020/8/26 21:46
* @Author gaohengli
* @Version 1.0
*/
//抽象的建造者
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();//拿到产品
}
package com.ghl.builder.demo02;
/**
* @ProjectName DesignPattern
* @ClassName Product
* @Date 2020/8/26 21:47
* @Author gaohengli
* @Version 1.0
*/
//产品
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 + '\'' +
'}';
}
}
package com.ghl.builder.demo02;
/**
* @ProjectName DesignPattern
* @ClassName Worker
* @Date 2020/8/26 21:53
* @Author gaohengli
* @Version 1.0
*/
//具体的建造者
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;
}
}
package com.ghl.builder.demo02;
/**
* @ProjectName DesignPattern
* @ClassName Test
* @Date 2020/8/26 21:56
* @Author gaohengli
* @Version 1.0
*/
//测试构造者模式
public class Test {
public static void main(String[] args) {
//服务员
Worker worker = new Worker();
Product product = worker.getProduct();
System.out.println(product.toString());
//链式编程,在原来的基础上自由组合
Product product1 = worker.buildA("全家桶").
getProduct();
System.out.println(product1.toString());
}
}

