1、建造者模式:适用于创建复杂对象,这些对象有着基本的轮廓,单具体实现又不一样
2、组成:
(1)接口Builder:规定了一个产品由哪些零件组成,类似零件表
(2)Builder的具体实现类:根据零件表建造具体的零件
(3)Director:具体建造者,将各个零件组装到一起
3、以建造一个机器人为例
package 创建型模式.建造者模式;
/**
* @Author: lxpStu
* @Date: 2021/10/30/21:54
* @Description:机器人的各个组成部分抽象(零件表)
*/
public interface Builder {
/**
* 头
*/
void head();
/**
* 身体
*/
void body();
/**
* 胳膊
*/
void arm();
/**
* 腿
*/
void leg();
/**
* 脚
*/
void foot();
}
package 创建型模式.建造者模式.impl;
import 创建型模式.建造者模式.Builder;
/**
* @Author: lxpStu
* @Date: 2021/10/30/21:57
* @Description: 建造机器人A的零件
*/
public class RobotA implements Builder {
@Override
public void head() {
System.out.println("生产机器人A的头");
}
@Override
public void body() {
System.out.println("生产机器人A的身体");
}
@Override
public void arm() {
System.out.println("生产机器人A的胳膊");
}
@Override
public void leg() {
System.out.println("生产机器人A的腿");
}
@Override
public void foot() {
System.out.println("生产机器人A的脚");
}
}
package 创建型模式.建造者模式.impl;
import 创建型模式.建造者模式.Builder;
/**
* @Author: lxpStu
* @Date: 2021/10/30/21:57
* @Description: 建造机器人B的零件
*/
public class RobotB implements Builder {
@Override
public void head() {
System.out.println("生产机器人B的头");
}
@Override
public void body() {
System.out.println("生产机器人B的身体");
}
@Override
public void arm() {
System.out.println("生产机器人B的胳膊");
}
@Override
public void leg() {
System.out.println("生产机器人B的腿");
}
@Override
public void foot() {
System.out.println("生产机器人B的脚");
}
}
package 创建型模式.建造者模式;
import 创建型模式.建造者模式.impl.RobotA;
import 创建型模式.建造者模式.impl.RobotB;
/**
* @Author: lxpStu
* @Date: 2021/10/30/21:59
* @Description: 建造者:组装机器人
*/
public class Director {
public void createRobot(){
Builder ra = new RobotA();
ra.head();
ra.body();
ra.arm();
ra.leg();
ra.foot();
System.out.println("机器人A组装完毕...\n");
Builder rb = new RobotB();
rb.head();
rb.body();
rb.arm();
rb.leg();
rb.foot();
System.out.println("机器人B组装完毕...");
}
}
package 创建型模式.建造者模式;
/**
* @Author: lxpStu
* @Date: 2021/10/30/22:02
* @Description: 购买机器人的客户,获取机器人A、B
*/
public class Main {
public static void main(String[] args) {
Director director = new Director();
director.createRobot();
}
}