建造者模式
1.定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建出不同的表示。
2.使用场景:
- 相同的方法,不同的执行顺序,产生不同的事件结果时;
- 当初始化一个对象特别复杂,如参数多,且很多参数都具有默认值时;
- 产品类非常复杂,或产品类中的调用顺序不同产生了不同的作用。
3.UML图
4.详解:
Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程与它的部件解耦,使得构建过程和部件的表示分离开来。
下面用代码举例阐述,首先是产品类与产品的组装接口:
public static class Computer {
private String mCpu;
private String mMainBoard;
private String mRam;
public void setmCpu(String mCpu) {
this.mCpu = mCpu;
}
public void setmMainBoard(String mMainBoard) {
this.mMainBoard = mMainBoard;
}
public void setmRam(String mRam) {
this.mRam = mRam;
}
@Override
public String toString() {
return mCpu + "==" + mMainBoard + "==" + mRam;
}
}
public interface ComputerBuilder {
void buildCpu(String cpu);
void buildMainBoard(String mainBoard);
void buildRam(String ram);
Computer create();
}
然后是具体的组装实现类:
public static class ConcreteBuilder implements ComputerBuilder {
private Computer computer = new Computer();
@Override
public void buildCpu(String cpu) {
computer.setmCpu(cpu);
}
@Override
public void buildMainBoard(String mainBoard) {
computer.setmMainBoard(mainBoard);
}
@Override
public void buildRam(String ram) {
computer.setmRam(ram);
}
@Override
public Computer create() {
return computer;
}
}
接着就是关键的组装类了,即产品组装过程:
public static class Director {
private ComputerBuilder builder;
public Director(ComputerBuilder builder) {
this.builder = builder;
}
public Computer createComputer(String cpu, String mainBoard, String ram) {
builder.buildCpu(cpu);
builder.buildMainBoard(mainBoard);
builder.buildRam(ram);
return builder.create();
}
}
测试代码:
public static void main(String[] args) {
ComputerBuilder builder = new ConcreteBuilder();
Director cBuilder = new Director(builder);
Computer computer = cBuilder.createComputer("i7-6700", "酷睿i7", "骁龙800");
System.out.println(computer.toString());//输出结果:i7-6700==酷睿i7==骁龙800
}