什么是Builder模式?
将一个复杂对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的对象。一步一步构建一个复杂的对象,它允许用户只通过指定复杂对象的内容和类型就可以构建他们,用户不需要知道内部的具体构建细节。
有什么特点?
优点:
1.良好的封装性,使用建造者模式可以使客户端不必知道产品内部组成的细节
2.建造者独立,容易扩展
3.在对象的创建过程中会使用到系统中的一些其他对象,这些对象在产品的构建过程中不易得到
缺点:
1.会产生多余的Builder对象,消耗内存
2.对象的构建过程暴露
如何使用
Builder模式可以分两部分构建
一、对象部分
/**
* 产品抽象类,表明产品具有的所有属性
*/
public abstract class Computer {
int mCPUCore = 1;
int mRamSize = 0;
String mOS = "Dos";
public abstract void setCPUCore(int mCPUCore);
public abstract void setRamSize(int mRamSize);
public abstract void setOS(String mOS);
@Override
public String toString() {
return "\ncpuCore:"+mCPUCore+"\nramSize:"+mRamSize+"\nos:"+mOS;
}
}
/**
* 具体产品
*/
public class AppleComputer extends Computer {
AppleComputer(){}
@Override
public void setCPUCore(int mCPUCore) {
super.mCPUCore = mCPUCore;
}
@Override
public void setRamSize(int mRamSize) {
super.mRamSize = mRamSize;
}
@Override
public void setOS(String mOS) {
super.mOS = mOS;
}
}
二、Builder部分
/**
* builder抽象类
*/
public abstract class Builder {
public abstract Builder buildCPU(int cpu);
public abstract Builder buildRam(int ram);
public abstract Builder buildOS(String os);
public abstract Computer create();
}
/**
* 具体Builder
*/
public class AppleComputerBuilder extends Builder {
private Computer computer = new AppleComputer();
@Override
public Builder buildCPU(int cpu) {
computer.setCPUCore(cpu);
return this;
}
@Override
public Builder buildRam(int ram) {
computer.setRamSize(ram);
return this;
}
@Override
public Builder buildOS(String os) {
computer.setOS(os);
return this;
}
@Override
public Computer create() {
return computer;
}
}
三、测试
public class TestBuilder {
public static void main(String [] args){
Builder builder = new AppleComputerBuilder();
AppleComputer appleComputer = (AppleComputer) builder.buildCPU(8)
.buildRam(1204)
.buildOS("doc")
.create();
System.out.print(appleComputer.toString());
}
}