1.模式的定义
建造者模式(又称构建器模式):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
使用建造者模式,用户只需指定需要建造的类型就可以得到它们,而无需知道具体的建造过程和细节。
2.模式的结构
建造者模式中的角色构成
建造者(Builder):为创建一个Product对象的各个部件指定的抽象接口
具体的建造者(ConcreteBuilder):实现Builder接口,构造和装配各个部件
产品(Product):具体的产品
指挥者(Director):用于构建一个使用Builder接口的对象
3.模式的实现
下面通过建造者模式来实现创建机器人的过程
机器人产品类 Robot.java
public class Robot {
private String head;
private String hand;
private String foot;
private String body;
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
public String getHand() {
return hand;
}
public void setHand(String hand) {
this.hand = hand;
}
public String getFoot() {
return foot;
}
public void setFoot(String foot) {
this.foot = foot;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
创建机器人对象的各个零部件的接口 IBuildRobot.java
public interface IBuildRobot {
public void buildHead();
public void buildHand();
public void buildFoot();
public void buildBody();
public Robot createRobot();
}
创建具体的小型机器人的类 SmallRobotBuilder.java
public class SmallRobotBuilder implements IBuildRobot {
Robot robot;
public SmallRobotBuilder(){
robot = new Robot();
}
@Override
public void buildHead(){
robot.setHead("头:直径20cm的球体");
}
@Override
public void buildHand(){
robot.setHand("手:小型");
}
@Override
public void buildFoot(){
robot.setFoot("脚:小型");
}
@Override
public void buildBody(){
robot.setBody("躯干:宽20cm的正方体");
}
public Robot createRobot(){
return robot;
}
}
指挥者类 Director.java
public class Director {
public Robot createRobotByDirector(IBuildRobot robot){
robot.buildBody();
robot.buildFoot();
robot.buildHand();
robot.buildHead();
return robot.createRobot();
}
}
客户端类 FactoryTest.java
public class FactoryTest {
public static void main(String[] args){
Director director = new Director();
Robot robot = director.createRobotByDirector(new SmallRobotBuilder());
System.out.println(robot.getHead());
System.out.println(robot.getHand());
System.out.println(robot.getFoot());
System.out.println(robot.getBody());
}
}
运行结果
建造者模式通常用于构建一些复杂的对象,这些对象内部构建间的构造顺序通常是固定的,但对象内部的构建通常面临复杂的变化。由于建造者模式使建造代码和表示代码分离,所以若需改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。比如需要创建一个大型机器人,则可以在上述例子的基础上添加一个 LargeRobotBuilder.java 的类。
(声明:本文为个人学习笔记,部分观点非原创。如有问题,欢迎讨论。转载请注明出处https://me.csdn.net/Iris_LDDDD )