她颓然坐在一个池塘旁边,茫然对池塘中自己的影子。忽然一片树叶飘落池中,静止的池水泛起了小小的涟漪,使她的影子也微微晃动起来。她突然觉得心头的结解开了,是呀!为什么她会有那种说不出的孤寂感?原来是世界是缺少一种像她一样的生物。想到这儿,她马上用手在池边挖了些泥土,和上水,照着自己的影子捏了起来。捏着捏着,捏成了一个小小的东西,模样与女娲差不多,也有五官七窍,双手两脚。捏好后往地上一放,居然活了起来。女娲一见,满心欢喜,接着又捏了许多。她把这些小东西叫作“人”。今天我们的大话设计就从女娲抟土造人的故事开始说起,女娲要建造一个人,那首先要造头,身体,胳膊和腿,这就关乎到一个制造工序的问题,不知道读者有没有这样的感觉,建造者模式和工程模式很接近,但是建造者模式提供了一个更加细粒度的对象的建造过程,我们先来看一下,建造者模式的结构图:
依然以我们上述的女娲抟土造人为例,看看我们的代码,首先,女娲要先创建一个需要建造的对象,如下:
//要构造的对象 public class Robust { String head; String body; String arm; String leg; public String getHead() { return head; } public void setHead(String head) { this.head = head; } public String getBody() { return body; } public void setBody(String body) { this.body = body; } public String getArm() { return arm; } public void setarm(String arm) { this.arm = arm; } public String getLeg() { return leg; } public void setLeg(String leg) { this.leg = leg; } }然后有一个构造者的接口,其中包括了建造者会使用的建造过程
public interface Builder { public void buidBody(String body); public void buidHead(String head); public void buidArm(String arm); public void buidLeg(String leg); public Robust getRobust(); } public class RobustBuilder implements Builder { Robust robust = new Robust(); public void buidBody(String body) { robust.setBody(body); } public void buidHead(String head) { robust.setHead(head); } public void buidArm(String arm) { robust.setArm(arm); } public void buidLeg(String leg) { robust.setLeg(leg); } public Robust getRobust() { return robust; } }有了建造者之后,需要有一个指挥家来指示建造的过程:
//指挥建造的类 public class Director { public Robust Construct(Builder builder) { builder.buidBody(null); builder.buidHead(null); builder.buidArm(null); builder.buidLeg(null); return builder.getRobust(); } }这样,女王抟土造人的过程就完成了,从代码角度来说, 如果我们希望分离复杂类型构建规则和类型内部组成,或者希望把相同的构建过程用于构建不同类型的时候可以考虑使用建造者模式。从应用角度来说, 如果我们希望解耦产品的创建过程和产品的具体配件,或者我们希望为所有产品的创建复用一套稳定并且复杂的逻辑的时候可以考虑使用建造者模式。设计之旅,未完待续......