多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## **模式的定义** 定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。 ## **代码实现** 需求:一家制作机器人的厂商需要打造一个机器人,那么可以把一整个构造过程分解为 ``` 1. 创建机器人身体 2. 创建机器人头部 3. 创建机器人四肢 4. 最后组装成一个完整的机器人 ``` 代码实现 1. 创建机器人对象 ``` public class Robot { // 头部 private String head; // 身体 private String body; // 四肢 private String limbs; // get set ... } ``` 2. 定义一个构建机器人的标准接口 ``` public interface RobotBuilder { // 创建头部 void buildHead(); // 创建身体 void buildBody(); // 创建四肢 void buildLimbs(); // 组装 Robot buildRobot(); } ``` 3. 定义完标准接口后,我们需要根据不同的需求来实现这个接口,比如创建一个男性的机器人 ``` public class MaleRobotBuilder implements RobotBuilder { private Robot robot; // 构造行数初始化机器人对象 public MaleRobotBuilder() { this.robot = new Robot(); } @Override public void buildHead() { robot.setHead("男性:头大"); } @Override public void buildBody() { robot.setBody("男性:身体大"); } @Override public void buildLimbs() { robot.setLimbs("男性:四肢粗壮"); } @Override public Robot buildRobot() { return robot; } } ``` 4. 创建一个总工程师类来完成对机器人的组装 ``` public class RobotDirector { public Robot construct(RobotBuilder robotBuilder) { robotBuilder.buildBody(); robotBuilder.buildHead(); robotBuilder.buildLimbs(); return robotBuilder.buildRobot(); } } ``` 5. 客户端调用 ``` public static void main(String[] args) { // 指定建造一个男性的机器人 MaleRobotBuilder builder = new MaleRobotBuilder(); // 实例化总工程师 RobotDirector director = new RobotDirector(); // 组装 Robot robot = director.construct(builder); System.out.println(robot.getBody()); System.out.println(robot.getHead()); System.out.println(robot.getLimbs()); } ``` ## **总结** 建造者模式中主要有以下四个角色: 1. Product:要创建的复杂对象(Robot)。 2. Builder:一个抽象接口,规范复杂对象的各个组成部分(RobotBuilder)。 3. ConcreteBuilder:针对不同的业务,实现Builder接口,具体实现各个复杂的功能,在建造完成后提供产品实例。 4. Director:总工程师,负责把各个复杂的部分按顺序组装成一个完整产品 使用场景: 1. 需要生成的对象具有复杂的内部结构。 2. 需要生成的对象内部属性本身相互依赖。 与工厂方法的区别: 工厂方法模式注重的是**整体对象的创建方法**,而建造者模式注重的是**部件构建的过程**,旨在通过一步一步地精确构造创建出一个复杂的对象。工厂模式关心整体,建造者模式关心细节。比如我们举例的机器人厂商,假如要建造一个机器人,工厂模式直接就能建造出一个机器人,而不需要关心细节。而建造者模式,则需要先构建头部,身体,四肢,再最后按顺序组装成一个机器人。