将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。

    【角色】

    • 产品类(Product):一个具体的产品类对象;
    • 抽象建造者类(Builder):为我们需要生成的类对象,构建不同的模块属性,即:公开构建产品类的属性,隐藏产品类的其他功能;
    • 具体建造者类(ConcreteBuilder):实现我们要生成的类对象;
    • 导演类(Director):确定构建我们的类对象具体有哪些模块属性,在实际应用中可以不需要这个角色,直接通过client处理;

    【抽象工厂模式 VS 建造者模式】

    • 抽象工厂模式实现对产品家族的创建,一个产品家族是这样的一系列产品:具有不同分类维度的产品组合,采用抽象工厂模式不需要关心构建过程,只关心什么产品由什么工厂生产即可。
    • 建造者模式则是要求按照指定的蓝图建造产品,它的主要目的是通过组装零配件而产生-一个新产品 ```java /**

      • 电脑类 */ public class Computer { // CPU private String cpu; // 内存 private String memory; // 硬盘 private String disk;

        @Override public String toString() {

        1. return "Computer{" +
        2. "cpu='" + cpu + '\'' +
        3. ", memory='" + memory + '\'' +
        4. ", disk='" + disk + '\'' +
        5. '}';

        } }

    ```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'}