建造者(Builder)模式:表示一个对象通常由多个子部件按照一定的步骤组装起来的,例如:电脑是由CPU,显卡,内存,硬盘等部件组装的。
标准定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。
优点:
- 封装好,构建与表示分离
- 扩展性好,建造者直接相互分离,系统解耦
- 建造过程细节化,不会对其他模块产生影响
缺点:
- 产品如果发生变化,则需要同步修改
建造者和工厂模式的区别:建造者模式更加关注组装过程,而工厂模式则更加关注创建过程
建造者模式的结构:
- 产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个零部件。
- 抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。
- 具体建造者(Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。
- 指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息
示例:
public class BuilderDemo {public static void main(String[] args) {System.out.println(Builder.buildMac()); // Computer{cpu='cpu', monitor='Mac显示器', hardDisk='显卡', memory='内存'}System.out.println(Builder.buildLenovo()); // Computer{cpu='cpu', monitor='联想显示器', hardDisk='显卡', memory='内存'}}// 具体产品static class Computer{private String cpu;private String monitor;private String hardDisk;private String memory;// 省略 get/set/toString方法}// 抽象构建者interface AbstractBuilder{Computer build(String cpu,String monitor,String hardDisk,String memory);}// 具体构建者static class ComputerBuilder implements AbstractBuilder{@Overridepublic Computer build(String cpu, String monitor, String hardDisk, String memory) {return new Computer(cpu,monitor,hardDisk,memory);}}// 指挥者static class Builder{static Computer buildMac(){return new ComputerBuilder().build("cpu","Mac显示器","显卡","内存");}static Computer buildLenovo(){return new ComputerBuilder().build("cpu","联想显示器","显卡","内存");}}}
