将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。
【角色】
- 产品类(Product):一个具体的产品类对象;
- 抽象建造者类(Builder):为我们需要生成的类对象,构建不同的模块属性,即:公开构建产品类的属性,隐藏产品类的其他功能;
- 具体建造者类(ConcreteBuilder):实现我们要生成的类对象;
- 导演类(Director):确定构建我们的类对象具体有哪些模块属性,在实际应用中可以不需要这个角色,直接通过client处理;
【抽象工厂模式 VS 建造者模式】
- 抽象工厂模式实现对产品家族的创建,一个产品家族是这样的一系列产品:具有不同分类维度的产品组合,采用抽象工厂模式不需要关心构建过程,只关心什么产品由什么工厂生产即可。
建造者模式则是要求按照指定的蓝图建造产品,它的主要目的是通过组装零配件而产生-一个新产品 ```java /**
电脑类 */ public class Computer { // CPU private String cpu; // 内存 private String memory; // 硬盘 private String disk;
@Override public String toString() {
return "Computer{" +"cpu='" + cpu + '\'' +", memory='" + memory + '\'' +", disk='" + disk + '\'' +'}';
} }
```java
/**
* 电脑建造者抽象类
*/
public abstract class AbstractComputerBuilder {
protected Computer computer = new Computer();
/**
* 组装CPU
*/
abstract void buildCpu();
/**
* 组装内存
*/
abstract void buildMemory();
/**
* 组装硬盘
*/
abstract void buildDisk();
protected Computer getComputer() {
return computer;
}
}
/**
* 苹果电脑建造者
*/
public class MacbookComputerBuilder extends AbstractComputerBuilder {
@Override
void buildCpu() {
computer.setCpu("i7");
}
@Override
void buildMemory() {
computer.setMemory("16G");
}
@Override
void buildDisk() {
computer.setDisk("512G");
}
}
/**
* 联想电脑建造者
*/
public class LenovoComputerBuilder extends AbstractComputerBuilder {
@Override
void buildCpu() {
computer.setCpu("i5");
}
@Override
void buildMemory() {
computer.setMemory("8G");
}
@Override
void buildDisk() {
computer.setDisk("256G");
}
}
/**
* 电脑卖家
*/
public class ComputerSeller {
private AbstractComputerBuilder computerBuilder;
public ComputerSeller(AbstractComputerBuilder computerBuilder) {
this.computerBuilder = computerBuilder;
}
public Computer bulidComputer() {
computerBuilder.buildCpu();
computerBuilder.buildMemory();
computerBuilder.buildDisk();
return computerBuilder.getComputer();
}
}
public class BuilderTest {
public static void main(String[] args){
// 建造苹果电脑
AbstractComputerBuilder macbookBuilder = new MacbookComputerBuilder();
ComputerSeller computerSeller = new ComputerSeller(macbookBuilder);
Computer macbook = computerSeller.bulidComputer();
System.out.println("苹果电脑:" + macbook);
// 建造联想电脑
AbstractComputerBuilder lenoveBuilder = new LenovoComputerBuilder();
ComputerSeller computerSeller2 = new ComputerSeller(lenoveBuilder);
Computer lenovo = computerSeller2.bulidComputer();
System.out.println("联想电脑:" + lenovo);
}
}
----输出----
苹果电脑:Computer{cpu='i7', memory='16G', disk='512G'}
联想电脑:Computer{cpu='i5', memory='8G', disk='256G'}
