建造者(Builder)模式:表示一个对象通常由多个子部件按照一定的步骤组装起来的,例如:电脑是由CPU,显卡,内存,硬盘等部件组装的。

    标准定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。

    优点:

    1. 封装好,构建与表示分离
    2. 扩展性好,建造者直接相互分离,系统解耦
    3. 建造过程细节化,不会对其他模块产生影响

    缺点:

    1. 产品如果发生变化,则需要同步修改

    建造者和工厂模式的区别:建造者模式更加关注组装过程,而工厂模式则更加关注创建过程

    建造者模式的结构:

    1. 产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个零部件。
    2. 抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。
    3. 具体建造者(Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。
    4. 指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息

    示例:

    1. public class BuilderDemo {
    2. public static void main(String[] args) {
    3. System.out.println(Builder.buildMac()); // Computer{cpu='cpu', monitor='Mac显示器', hardDisk='显卡', memory='内存'}
    4. System.out.println(Builder.buildLenovo()); // Computer{cpu='cpu', monitor='联想显示器', hardDisk='显卡', memory='内存'}
    5. }
    6. // 具体产品
    7. static class Computer{
    8. private String cpu;
    9. private String monitor;
    10. private String hardDisk;
    11. private String memory;
    12. // 省略 get/set/toString方法
    13. }
    14. // 抽象构建者
    15. interface AbstractBuilder{
    16. Computer build(String cpu,String monitor,String hardDisk,String memory);
    17. }
    18. // 具体构建者
    19. static class ComputerBuilder implements AbstractBuilder{
    20. @Override
    21. public Computer build(String cpu, String monitor, String hardDisk, String memory) {
    22. return new Computer(cpu,monitor,hardDisk,memory);
    23. }
    24. }
    25. // 指挥者
    26. static class Builder{
    27. static Computer buildMac(){
    28. return new ComputerBuilder().build("cpu","Mac显示器","显卡","内存");
    29. }
    30. static Computer buildLenovo(){
    31. return new ComputerBuilder().build("cpu","联想显示器","显卡","内存");
    32. }
    33. }
    34. }