不断的学习,我们才能不断的前进
一个好的程序员是那种过单行线马路都要往两边看的人

JAVA设计模式-建造者模式

1. 概述

  • 简介
    • 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
    • 建造者模式是一步一步创建一个复杂的对象,建造者模式注重的是一步一步的创建复杂对象。这个和工厂模式存在区别。
  • 优缺点
    • 优点
      • 将产品本身和其创建过程解耦,用户不需要知道内部组成的细节。
      • 增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合“开闭原则“
      • 具体的建造者完全独立,使用不同的具体建造者生产不同的对象
    • 缺点
      • 建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式
      • 如果产品内部变化很复杂,则需要大量的具体建造者,会导致系统更加庞大

代码示例:

/**
 * @Author laijinhan
 * @date 2020/9/13 10:13 上午
 */

import lombok.AllArgsConstructor;
import lombok.Data;

import javax.sound.midi.Soundbank;

/**
 * 抽象产品构成接口
 */
interface IBuilder{
    void buildPart1();
    void buildPart2();
    void buildPart3();
    Product build();
}
/**
 * 产品
 */
@Data
class Product{
    private String part1;
    private String part2;
    private String part3;

}
/**
 * 具体的创建者
 */
class TruckConcreateBuilder implements IBuilder{
    private Product product=new Product();

    @Override
    public void buildPart1() {
        product.setPart1("货车轮胎完成");
    }

    @Override
    public void buildPart2() {
        product.setPart2("货车发动机完成");
    }

    @Override
    public void buildPart3() {
        product.setPart3("货车车架完成");
    }

    @Override
    public Product build() {
        return product;
    }
}
class ConcreteBuilder implements IBuilder {
    private Product product = new Product();

    @Override
    public void buildPart1() {
        product.setPart1("轮胎完成");
    }

    @Override
    public void buildPart2() {
        product.setPart2("发动机完成");
    }

    @Override
    public void buildPart3() {
        product.setPart3("车架完成");
    }

    @Override
    public Product build() {
        return product;
    }
}

/**
 * 指挥者
 */
@AllArgsConstructor
@Data
class Conductor{
    private IBuilder builder;
    public Product construct() {
        builder.buildPart1();
        builder.buildPart2();
        builder.buildPart3();
        return builder.build();
    }
}
public class BuildMode {
    public static void main(String[] args) {
        IBuilder builder=new ConcreteBuilder();
        Conductor conductor = new Conductor(builder);
        Product product = conductor.construct();
        System.out.println("产品信息:"+product.getPart1()+product.getPart2()+product.getPart3());

        conductor.setBuilder(new TruckConcreateBuilder());
        Product truck = conductor.construct();
        System.out.println("产品信息:"+truck.getPart1()+truck.getPart2()+truck.getPart3());

    }
}

参考链接

死磕设计模式—建造者模式


目录