设计模式之—建造者模式

建造者模式

参考1-菜鸟教程

参考2-路飞

1.概述

建造者模式(Builder Pattern), 使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。

介绍

意图:将一个复杂的构建与其分离,使得同样的构建过程可以创建不同的表示。

主要解决:主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成,由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法却相当稳定。

何时使用: 一些基本部件不会变,而其组合经常变化的时候。

如何解决: 将变与不变分离开。

关键代码: 建造者:创建和提供实例,导演:管理建造出来的实例的依赖关系。

核心组成

  • Builder:抽象建造者,定义多个通用方法和构建方法
  • ConcreteBuilder:具体建造者,可以有多个
  • Director:指挥者,控制整个组合过程,将需求交给建造者,由建造者去创建对象
  • Product:产品角色

通过图再来理解下

在这里插入图片描述

2.代码实现

产品角色Product

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Computer {

        /*
         * 这里为了方便,都使用String类型,实际上应该大部分是自定义类型
         * */

         private String cpu;

         private String memory;

         private String mainboard;
}

抽象建造者

public interface Builder {

         void buildCpu();

         void buildMemory();

         void buildMainBoard();

         Computer createComputer();
}

具体建造者

这里为了方便,只写一个实现类。

public class HighComputerBuilder implements Builder {

    private Computer computer = new Computer();

    @Override
    public void buildCpu() {
        computer.setCpu("高配 Cpu");
    }

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

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

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

指挥者,控制产品生产的过程

public class Director {

        public Computer build(Builder builder){
                 builder.buildCpu();
                 builder.buildMainBoard();
                 builder.buildMemory();
                 return builder.createComputer();
        }
}

测试

public class Main {

    public static void main(String[] args) {
        Director director = new Director();
        Computer computer = director.build(new HighComputerBuilder());
        System.out.println(computer);
    }
}

/*
Computer(cpu=高配 Cpu, memory=高配 内存, mainboard=高配 主板)
*/

3.小结

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

shstart7

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

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

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

打赏作者

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

抵扣说明:

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

余额充值