public 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;
}
}
创建Builder
public abstract class Builder {
public abstract void buildCpu(String cpu);
public abstract void buildMainboard(String mainboard);
public abstract void buildRam(String ram);
public abstract Computer create();
}
public class MoonComputerBuilder extends Builder {
private Computer mComputer = new Computer();
@Override
public void buildCpu(String cpu) {
mComputer.setmCpu(cpu);
}
@Override
public void buildMainboard(String mainboard) {
mComputer.setmMainboard(mainboard);
}
@Override
public void buildRam(String ram) {
mComputer.setmRam(ram);
}
@Override
public Computer create() {
return mComputer;
}
}
public class Direcror {
Builder mBuild=null;
public Direcror(Builder build){
this.mBuild=build;
}
public Computer CreateComputer(String cpu,String mainboard,String ram){
//规范建造流程
this.mBuild.buildMainboard(mainboard);
this.mBuild.buildCpu(cpu);
this.mBuild.buildRam(ram);
return mBuild.create();
}
}
public class CreatComputer {
public static void main(String[]args){
Builder mBuilder=new MoonComputerBuilder();
Direcror mDirecror=new Direcror(mBuilder);
//组装电脑
mDirecror.CreateComputer("i7-6700","华擎玩家至尊","三星DDR4");
}
}
优缺点
优点:
使用建造者模式可以使客户端不必知道产品内部组成的细节。
具体的建造者类之间是相互独立的,容易扩展。
由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
缺点:
产生多余的Build对象以及Dirextor类。
第二种
public final class FullName
{
private final Name lastName;
private final Name firstName;
private final Name middleName;
private final Salutation salutation;
private final Suffix suffix;
private FullName(
final Name newLastName,
final Name newFirstName,
final Name newMiddleName,
final Salutation newSalutation,
final Suffix newSuffix)
{
this.lastName = newLastName;
this.firstName = newFirstName;
this.middleName = newMiddleName;
this.salutation = newSalutation;
this.suffix = newSuffix;
}
public Name getLastName()
{
return this.lastName;
}
public Name getFirstName()
{
return this.firstName;
}
public Name getMiddleName()
{
return this.middleName;
}
public Salutation getSalutation()
{
return this.salutation;
}
public Suffix getSuffix()
{
return this.suffix;
}
@Override
public String toString()
{
return this.salutation + " " + this.firstName + " " + this.middleName
+ this.lastName + ", " + this.suffix;
}
public static class FullNameBuilder
{
private final Name nestedLastName;
private final Name nestedFirstName;
private Name nestedMiddleName;
private Salutation nestedSalutation;
private Suffix nestedSuffix;
public FullNameBuilder(
final Name newLastName, final Name newFirstName)
{
this.nestedLastName = newLastName;
this.nestedFirstName = newFirstName;
}
public FullNameBuilder middleName(final Name newMiddleName)
{
this.nestedMiddleName = newMiddleName;
return this;
}
public FullNameBuilder salutation(final Salutation newSalutation)
{
this.nestedSalutation = newSalutation;
return this;
}
public FullNameBuilder suffix(final Suffix newSuffix)
{
this.nestedSuffix = newSuffix;
return this;
}
public FullName createFullName()
{
return new FullName(
nestedLastName, nestedFirstName, nestedMiddleName,
nestedSalutation, nestedSuffix);
}
}
}