定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
使用场景:一个产品的的构建组件及顺序是稳定的,但是组件的实现不同。
实现:定义builder抽象类,定义构建各个组件的抽象方法,后面定义一个获取结果的方法。然后定义实现类,聚合一个产品对象,分别实现所有抽象方法。最后定义指挥者类,调用建造者类的各个构建方法并获取对象。
优点:将变与不变分离开。

代码示例:汽车的组装,发动机可以是各个国家的,同理所有配件都是必要的,但是配件来自哪,怎么实现的不固定。
/**
* 构建接口
* @author liuhao
*
*/
public interface Builder {
/*
* 构建轮胎
*/
void buildTire();
/*
* 构建发动机
*/
void buildEngine();
//其他组件省略
/**
* 获取组装后的对象
*/
Car getCar();
}
public class CarBuilder implements Builder {
private Car car = new Car();
@Override
public void buildTire() {
car.getCompents().add("国产轮胎");
}
@Override
public void buildEngine() {
car.getCompents().add("德国发动机");
}
@Override
public Car getCar() {
return car;
}
}
import java.util.ArrayList;
import java.util.List;
/**
* 产品类-汽车
* @author liuhao
*
*/
public class Car {
//汽车配件
private List<String> compents = new ArrayList<String>();
public List<String> getCompents() {
return compents;
}
public void show() {
System.out.println(compents);
}
}
/**
* 指挥者类
* @author liuhao
*
*/
public class Director {
/**
* 控制构建过程
* @param builder
*/
public void construct(Builder builder) {
builder.buildEngine();
builder.buildTire();
}
}
public class Main {
public static void main(String[] args) {
Director director = new Director();
Builder builder = new CarBuilder();
director.construct(builder);
Car car = builder.getCar();
car.show();
}
}
结果:

被折叠的 条评论
为什么被折叠?



