新手提问~谢谢解答

09-03-20 marbury822
在builder模式里面,如果我只用到一个concreteBuilder,那么我还需要使用builder模式吗?

我要建的对象是个复杂的对象,需要一步一步来创建,但是对象的种类就一种,那么interface Builder不就是凭空多了一层?

在gof里提到什么时候用这个模式:

Where to use

•When the algorithm for creating a complex object should be independent of

the parts that make up the object and how they are assembled.

•When the construction process must allow different representations for the

object that is constructed.

•When you want to insulate clients from the knowledge of the actual

creation process and/or resulting product.

如果要用这个模式,是要满足全部3点吗?如果我只满足第一点呢?

刚开始学习模式,没什么经验,谢谢解答

[该贴被admin于2009-03-21 13:45修改过]

freebox
2009-03-20 21:30
说说我自己的理解。

interface ComputerBuilder{
  public Computer getComputer();
}
<p>

现在造一个计算机得:

abstract class CurrentComputerBuilder implements ComputerBuilder{
    abstract void buildCPU();
    abstract void buildHDD();
    abstract void buildRAM();
}
<p>

后来有一天,计算机硬盘技术发展很快,让计算机不再需要内存了:

abstract class FutureComputerBuilder implements ComputerBuilder{
    abstract void buildCPU();
    abstract void buildSuperHDD();
}
<p>

现在大部分计算机都是第一种,等发现未来计算机的时候再重构就行了。

或者原来构建CPU部件的方案是单一从intel来的,后来发现原来CPU可以从intel或amd构建,这时候重构一个实现也可以。

marbury822
2009-03-21 02:29
明白了,这个地方也许现在没用到,但是可以为将来扩展做准备。谢谢

IceQi
2009-03-21 21:24
还有一种方式:

interface CPUBuilder

{

CPU buildCPU()

}

interface HDDBuilder

{

HDD buildHDD()

}

interface RAMBuilder

{

RAM buildRAM()

}

interface PCBuilder

{

void setCPU(CPU){}

void setHDD(HDD){}

void setRAM(RAM){}

PC buildPC(){}

}

这样只需要分别定义出CPU HDD RAM的接口,就可以将部件的生产过程和PC的组装过程彻底的隔离了,他们各自只关注于特定的业务过程,CPU的生产过程和他作为部件的组装过程完全独立了。

有些时候模式是需要组合使用才能有效的。

OOLA
2009-03-24 16:56
builder模式是说相同的构造过程(构造流程),构造出不同形态的产品,这个构造过程通常来说不只是一步,而是多步,一步一步地进行建造。最终产出的产品可以非常的不相干。

至于建造的每一步使用什么材料,使用多少人力,builder模式不关心。

此模式重点突出的是相同的构造过程(构造流程),不一样的产品。

freebox的应该是builder模式的一种变种,构造流程可以随着变化而定制化。

猜你喜欢