java设计模式系列5——建造者设计模式

建造者设计模式

  • 建造者模式(Builder Pattern)

    • 使用多个简单的对象一步一步构建成一个复杂的对象,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

    • 允许用户只通过指定复杂对象的类型和内容就可以构建它们,不需要知道内部的具体构建细节

  • 场景举例

    • KFC创建套餐:套餐是一个复杂对象,它一般包含主食如汉堡、烤翅等和饮料 如果汁、 可乐等组成部分,不同的套餐有不同的组合,而KFC的服务员可以根据顾客的要求,一步一步装配这些组成部分,构造一份完整的套餐

编码实现

创建一个电脑类

@Data
public class Computer {

    private String cpu;

    private String memory;

    private String mainboard;

    private String disk;

    private String power;
}

创建一个抽象建造工厂接口

public interface ComputerBuilder {

    void buildCpu();

    void buildMainboard();

    void buildDisk();

    void buildPower();

    void buildMemory();

    Computer createComputer();

}

高配电脑实现

public class HighComputerBuilder implements ComputerBuilder{

    private Computer computer = new Computer();

    @Override
    public void buildCpu() {
        computer.setCpu("酷睿i9 cpu");
    }

    @Override
    public void buildMainboard() {
        computer.setMainboard("高配 主板");
    }

    @Override
    public void buildDisk() {
        computer.setDisk("高配 磁盘");
    }

    @Override
    public void buildPower() {
        computer.setPower("高配电源");
    }

    @Override
    public void buildMemory() {
        computer.setMemory("64G内存");
    }

    @Override
    public Computer createComputer() {
        return computer;
    }
}

低配电脑

/**
 * 具体的建造者,低配版
 * @author cv大魔王
 * @version 1.0
 * @date 2021/7/10 10:32
 */
public class LowComputerBuilder implements ComputerBuilder{

    private Computer computer = new Computer();

    @Override
    public void buildCpu() {
        computer.setCpu("酷睿i3 cpu");
    }

    @Override
    public void buildMainboard() {
        computer.setMainboard("低配 主板");
    }

    @Override
    public void buildDisk() {
        computer.setDisk("低配 磁盘");
    }

    @Override
    public void buildPower() {
        computer.setPower("低配电源");
    }

    @Override
    public void buildMemory() {
        computer.setMemory("1G内存");
    }

    @Override
    public Computer createComputer() {
        return computer;
    }
}

“导演类”

/**
 * 将产品和创建过程进行解耦,使用相同的创建过程创建不同的产品,
 * 控制产品生产过程Director是全程指导组装过程,具体的细节还是builder去操作
 * @author cv大魔王
 * @version 1.0
 * @date 2021/7/10 10:38
 */
public class ComputerDirector {

    public Computer create(ComputerBuilder builder){
        builder.buildCpu();
        builder.buildMemory();
        builder.buildMainboard();
        builder.buildDisk();
        builder.buildPower();
        return  builder.createComputer();
    }

}

使用:

public class TestMain {

    public static void main(String[] args) {
        ComputerDirector director = new ComputerDirector();
        //构建低配版电脑
        Computer computer = director.create(new LowComputerBuilder());
        System.out.println(computer);
    }
}

小结

优点

  • 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦
  • 每一个具体建造者都相对独立,而与其他的具体建造者无关,更加精细地控制产品的创建过程
  • 增加新的具体建造者无须修改原有类库的代码,符合开闭原则
  • 建造者模式结合链式编程来使用,代码上更加美观

缺点

  • 建造者模式所创建的产品一般具有较多的共同点,如果产品差异大则不建议使用
  • 建造者模式与抽象工厂模式的比较:
  • 建造者模式返回一个组装好的完整产品 , 抽象工厂模式返回一系列相关的产品,这些产品位于不同的产品等级结构,构成了一个产品族。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CV大魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值