定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
角色
image.png1、Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
2、ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
3、Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
4、Product:要创建的复杂对象。
定义组装的过程(Builder):组装电脑的过程
public abstract class Builder {
//第一步:装CPU
//声明为抽象方法,具体由子类实现
public abstract void BuildCPU();
//第二步:装主板
//声明为抽象方法,具体由子类实现
public abstract void BuildMainboard();
//第三步:装硬盘
//声明为抽象方法,具体由子类实现
public abstract void BuildHD();
//返回产品的方法:获得组装好的电脑
public abstract Computer GetComputer();
}
电脑城老板委派任务给装机人员(Director)
public class Director{
//指挥装机人员组装电脑
public void Construct(Builder builder){
builder. BuildCPU();
builder.BuildMainboard();
builder. BuildHD();
}
}
创建具体的建造者(ConcreteBuilder):装机人员
//装机人员1
public class ConcreteBuilder extend Builder{
//创建产品实例
Computer computer = new Computer();
//组装产品
@Override
public void BuildCPU(){
computer.Add("组装CPU")
}
@Override
public void BuildMainboard(){
computer.Add("组装主板")
}
@Override
public void BuildHD(){
computer.Add("组装主板")
}
//返回组装成功的电脑
@Override
public Computer GetComputer(){
return computer
}
}
定义具体产品类(Product):电脑
public class Computer{
//电脑组件的集合
private List<String> parts = new ArrayList<String>();
//用于将组件组装到电脑里
public void Add(String part){
parts.add(part);
}
public void Show(){
for (int i = 0;i<parts.size();i++){
System.out.println(“组件”+parts.get(i)+“装好了”);
}
System.out.println(“电脑组装完成,请验收”);
}
}
调用
public class Builder Pattern{
public static void main(String[] args){
//逛了很久终于发现一家合适的电脑店
//找到该店的老板和装机人员
Director director = new Director();
Builder builder = new ConcreteBuilder();
//沟通需求后,老板叫装机人员去装电脑
director.Construct(builder);
//装完后,组装人员搬来组装好的电脑
Computer computer = builder.GetComputer();
//组装人员展示电脑给小成看
computer.Show();
}
}
网友评论