java中23种设计模式之8-建造者模式(builder pattern)

  将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 [构建与表示分离,同构建不同表示]

    与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造模式可以强制实行一种分步骤进行的建造过程。

 建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。

 

以生产笔记本电脑来说,产品是Computer,建造工具是Builder(生产线),具体建造工具有两种“T60”和“T61”Builder(具体的两条生产线). 建造者是WorkerDirector(产线员工).

只要把具体的建造工具传给建造者,建造工具就能创建出产品。也就是把T60或T61的生产线和生产工艺传给建造者产线员工,生产线上就会生产处T60或T61型号的笔记本。

 

class Computer
{
private String name=null;
private String cpu=null;
private String ddr=null;
private String hdd=null;
public void setName(String name)
{
this.name=name;
}
public void setCpu(String cpu)
{
this.cpu=cpu;
}
public void setDdr(String ddr)
{
this.ddr=ddr;
}
public void setHdd(String hdd)
{
this.hdd=hdd;
}
public void printInfo()
{
System.out.println(name+" computer profile is:"+"cpu->"+cpu+", ddr->"+ddr+", hdd->"+hdd);
}
}

abstract class Builder
{
//private Computer aComputer=new Computer();
public abstract void buildCpu();
public abstract void buildDdr();
public abstract void buildHdd();

public abstract Computer getProduct();
}

class T60Builder extends Builder
{
private Computer aComputer=null;
public T60Builder()
{
aComputer=new Computer();
aComputer.setName("T60");
}
public void buildCpu()
{
aComputer.setCpu("core duro 2.0GHZ");
}
public void buildDdr()
{
aComputer.setDdr("Kingston 1G DDR");
}
public void buildHdd()
{
aComputer.setHdd("WD 160GB DISK");
}
public Computer getProduct()
{
return aComputer;
}
}

class T61Builder extends Builder
{
private Computer aComputer=null;
public T61Builder()
{
aComputer=new Computer();
aComputer.setName("T61");
}
public void buildCpu()
{
aComputer.setCpu("core duro 2.3GHZ");
}
public void buildDdr()
{
aComputer.setDdr("Kingston 2G DDR");
}
public void buildHdd()
{
aComputer.setHdd("WD 250GB DISK");
}
public Computer getProduct()
{
return aComputer;
}
}

class WorkerDirector
{
private Builder aBuilder=null;
public void constructorComputer(Builder builder)
{
aBuilder=builder;
aBuilder.buildCpu();
aBuilder.buildDdr();
aBuilder.buildHdd();
}
}

public class BuilderPatternTest
{
public static void main(String[] args)
{
Builder aBuilder=new T60Builder();
WorkerDirector aWorkerDirector=new WorkerDirector();
aWorkerDirector.constructorComputer(aBuilder);
Computer aComputer=aBuilder.getProduct();
aComputer.printInfo();

aBuilder=new T61Builder();
aWorkerDirector.constructorComputer(aBuilder);
aComputer=aBuilder.getProduct();
aComputer.printInfo();
}
}

///

输出结果:

T60 computer profile is:cpu->core duro 2.0GHZ, ddr->Kingston 1G DDR, hdd->WD 160GB DISK
T61 computer profile is:cpu->core duro 2.3GHZ, ddr->Kingston 2G DDR, hdd->WD 250GB DISK

转载于:https://www.cnblogs.com/wudymand/p/4379006.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值