作用:
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
关键点:
Product(具体产品):表示被构造的复杂对象。
package com.lpw.creator;
// 产品
public class Computer {
private String zhuBan;
private String yingPan;
private String cpu;
public Computer() {
super();
// TODO Auto-generated constructor stub
}
public Computer(String zhuBan, String yingPan, String cpu) {
super();
this.zhuBan = zhuBan;
this.yingPan = yingPan;
this.cpu = cpu;
}
public String getZhuBan() {
return zhuBan;
}
public void setZhuBan(String zhuBan) {
this.zhuBan = zhuBan;
}
public String getYingPan() {
return yingPan;
}
public void setYingPan(String yingPan) {
this.yingPan = yingPan;
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
}
builder(抽象构建产品):为创建一个产品对象的各个部门指定抽象接口。
package com.lpw.creator;
// 抽象构建产品
public interface Builder {
public void buiidZhuBan();
public void buildYingPan();
public void buildCpu();
public Computer buildComputer();
}
builderimpl (抽象构建具体表现):实现builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示
package com.lpw.creator;
// 抽象构建的具体实现
public class BuildCompter implements Builder{
private Computer computer = new Computer();
@Override
public void buiidZhuBan() {
// TODO Auto-generated method stub
computer.setZhuBan("华硕");
}
@Override
public void buildYingPan() {
// TODO Auto-generated method stub
computer.setYingPan("希捷");
}
@Override
public void buildCpu() {
// TODO Auto-generated method stub
computer.setCpu("intel i5");
}
@Override
public Computer buildComputer() {
// TODO Auto-generated method stub
return computer;
}
}
director(建造者):构造一个使用builder接口的对象。
package com.lpw.creator;
// 建造者
public class Director {
// 传入的参数一定要是父类
public static Computer ConstructorCom(Builder bc) {
bc.buiidZhuBan();
bc.buildYingPan();
bc.buildCpu();
return bc.buildComputer();
}
}
分析:
1.优点:
易于解耦:将产品本身于产品创建过程进行解耦,可以使用相同的创建过程来得到不同的产品,也就是说希捷一来抽象。
易于精确控制对象的创建:将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰。
易于拓展:
2.缺点:
1.建造者模式所创建的产品一般具有较多的共同点,其组成部分相似;
2.如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定限制。
如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。
应用场景:
需要生成的产品对象有复杂的内部结构,这些产品对象具备共性;
隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品;