英文:Builder
对于建造者模式而已,它主要是将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。适用于那些产品对象的内部结构比较复杂。
建造者模式将复杂产品的构建过程封装分解在不同的方法中,使得创建过程非常清晰,能够让我们更加精确的控制复杂产品对象的创建过程,同时它隔离了复杂产品对象的创建和使用,使得相同的创建过程能够创建不同的产品。但是如果某个产品的内部结构过于复杂,将会导致整个系统变得非常庞大,不利于控制,同时若几个产品之间存在较大的差异,则不适用建造者模式,毕竟这个世界上存在相同点大的两个产品并不是很多,所以它的使用范围有限。
其UML结构图:
//机器人的类
public class Robot{
private String head;
private String body;
private String hand;
private String foot;
}
只要是人都是这个类出来的。
//一个定义了造机器人标准的接口。
public interface IBuildHuman {
public void buildHead();
public void buildBody();
public void buildHand();
public void buildFoot();
public Robot createRobot();
}
一个接口定义好了。有各种造部位的方法,最后给个createRobot方法给你返回一个我们想要造的机器人。
public class SmartManBuilder implements IBuildHuman {
Robot robot;
public SmartManBuilder(){
robot = new Robot();
}
@Override
public void buildHead() {
robot.setHead("智商180的头脑");
}
@Override
public void buildBody() {
robot.setBody("新的身体");
}
@Override
public void buildHand() {
robot.setHand("新的手");
}
@Override
public void buildFoot() {
robot.setFoot("新的脚");
}
@Override
public Robot createRobot() {
return robot;
}
}
这个高智商的造机器人过程自然是实现了IBuildRobot这个造机器人标准的接口了
接下来,就是介绍建造者模式的精髓,那就是director。这个director呢,就是来执行我们刚才的造人动作的。没错,精髓就是我们刚才的造人动作。我们先看代码:
public class Director {
public Human createRobotByDirector(IBuildRobot bh){
bh.buildBody();
bh.buildFoot();
bh.buildHand();
bh.buildHead();
return bh.createRobot();
}
}
这个director类呢,重点在于createRobotByDirector的参数是我们的造人标准的接口。这样一来,只要是实现了我们的这个接口的类,就都可以作为参数,我们刚刚不是造了一个高智商的人吗?那我们如果想造一个身体运动能力出色的人,也就是运动员,这个director也可以启动这个造人过程,只要我们把这个运动员的类先写好。我们来看看director是如何发挥的:
public class BuilderTest {
public static void main(String[] args){
Director director = new Director();
Robot robot = director.createRobotByDirector(new SmartManBuilder());
System.out.println(robot.getHead());
System.out.println(robot.getBody());
System.out.println(robot.getHand());
System.out.println(robot.getFoot());
}
}
输出结果为
智商180的头脑
新的身体
新的手
新的脚