java设计模式-建造者模式
建造者模式,属于创建型模式
首先,我们在这里举个例子,大家应该都玩过网络游戏,进入游戏时候,我们要选择自己喜欢的角色,职业,性别,精细一点的游戏我们要选择各种个性化,如鼻子大小,身高,肤色,眼睛颜色等等。


我们用设计模式的话,怎么才能实现创建不同职业和个性化的功能呢。有的人说可以用工厂模式,工厂模式当然可以实现,工厂模式可以把所有 (职业 + 人物个性化) 的对象都创建一遍,那将是乘积的运算,10个职业*10个眼睛颜色*10个头发颜色等等, 那将要提前创建个多少对象,不敢想象, 代码几乎没有得到复用 。
在这里我们完全可以用建造者模式来简单的解决这个问题。如果说工厂模式创建的是对象,那么建造者模是创建细节对象。话不多说直接上代码:
游戏人物:

建造者:

具体人物(法师和战士):


指挥官:

测试类:

到这里,我们就用了2个类(ZhanshiBuilder,FashiBuilder),就能创建所有的个性化战士和法师,相对于工厂模式,我们代码更加的简洁,增加了代码的复用,减少了代码的耦合,问题得到了很好的解决。
总结:建造者模式是创建型模式中比较常见的一种,如果说工厂模式关注的是整体对象的创建,而建造者模式是更加关注对象细节的创建。在jdk源码中这些类使用了建造者模式:
java.lang.StringBuilder#append() (非线程安全)
java.lang.StringBuffer#append() (线程安全)
java.nio.ByteBuffer#put()(还CharBuffer,ShortBuffer,IntBuffer,LongBuffer
FloatBuffer和DoubleBuffer)
javax.swing.GroupLayout.Group#addComponent()
所有的实现 java.lang.Appendable