本文已参与[新人创作礼]活动,一起开启掘金创作之路。
说明
- 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
角色
- 抽象建造者
- 具体建造者
- 指挥者
- 产品
- 产品消费者
代码实现
- 利用建造者模式可以构建大对象,对外隐藏构建的逻辑
public abstract class Build {
public abstract void setCandy(String size);
public abstract Candy construct();
}
public class ChocolateBuild extends Build{
private Candy candy;
@Override
public void setCandy(String size) {
candy = new ChocolateCandy();
candy.setSize(size);
}
@Override
public Candy construct() {
this.candy.start();
this.candy.putCandy();
this.candy.putAdditive();
this.candy.packCandy();
this.candy.end();
return candy;
}
}
public class Client {
private Build build;
public void setBuild(Build build){
this.build = build;
}
public Candy getSmallCandy(){
build.setCandy("small");
return build.construct();
}
}
public abstract class Candy {
private String size;
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public void start(){
System.out.println("做糖果开始,型号:"+this.size);
}
public abstract void putCandy();
public abstract void putAdditive();
public abstract void packCandy();
public void end(){
System.out.println("做糖果结束");
}
}
public class ChocolateCandy extends Candy {
@Override
public void putCandy() {
System.out.println("巧克力糖果放糖");
}
@Override
public void putAdditive() {
System.out.println("巧克力糖果放巧克力");
}
@Override
public void packCandy() {
System.out.println("巧克力糖果打包");
}
}
public class test {
public static void main(String[] args){
Client client = new Client();
ChocolateBuild chocolateBuild = new ChocolateBuild();
client.setBuild(chocolateBuild);
Candy candy = client.getSmallCandy();
}
}