谈谈我对建造者模式的初步理解

前言

建造者模式,重点肯定是放在建造两字上,目的也就是建造一个对象,理解他的使用场景,往往比学会他的使用方法更重要。
一台电脑是如何生产出来的?首先工厂要有一个装电脑的机器或人(总而言之就是对象),然后他们要有一个人来指挥,如果没人来指挥,全听客户要求,很容易乱套。最后客户要提供自己需求,不然就是开盲盒买电脑(虽然提供了也是…)。综上,我们可以知道,当一个对象特别复杂的时候,比如电脑,他有很多组件,我们就可以使用建造者模式进行骚操作。

首先我们要确定产品,产品是具体的

public class Computer {
    private String cpu;//客户自定义
    private String ram;//客户自定义
    private String keyBoard;//商家提供
    public String getCpu() {
        return cpu;
    }
    public Computer setCpu(String cpu) {
        this.cpu = cpu;
        return this;
    }
    public String getRam() {
        return ram;
    }
    public Computer setRam(String ram) {
        this.ram = ram;
        return this;
    }
    public String getKeyBoard() {
        return keyBoard;
    }
    public Computer setKeyBoard(String keyBoard) {
        this.keyBoard = keyBoard;
        return this;
    }
}

生产电脑的,不管是人还是机器,统一称为电脑制造者,他们手上肯定有一个正在组装的电脑,就跟搬砖的一定会接触到砖是一个道理。

public abstract class ComputerBuilder {
    public abstract ComputerBuilder setPcCpu();
    public abstract ComputerBuilder setPcRam();
    public abstract ComputerBuilder setKeyBoard();
    public abstract Computer getComputer();
}

他们肯定有人在指挥,指挥者要知道指挥谁,然后指挥他装电脑的步骤,先装CPU,还是先装内存条。

public class ComputerDirector {
    public static void makeComputer(ComputerBuilder computerBuilder){
        computerBuilder.setPcRam().setPcCpu().setKeyBoard();
    }
}

工厂要清楚是什么工厂,然后工厂需要知道客户需求

public class MacComputerBuilder extends ComputerBuilder {
    private String cpu;//客户需求
    private String ram;//客户需求
    private Computer computer;//商家的电脑
    public MacComputerBuilder(String cpu,String ram) {
        computer=new Computer();
        //客户提供需求
        this.cpu=cpu;
        this.ram=ram;
    }
    @Override
    public ComputerBuilder setPcCpu() {
        this.getComputer().setCpu(cpu);
        return this;
    }
    @Override
    public ComputerBuilder setPcRam() {
        this.getComputer().setRam(ram);
        return this;
    }
    @Override
    public ComputerBuilder setKeyBoard() {
        //商家提供
        this.getComputer().setKeyBoard("苹果键盘");
        return this;
    }
    @Override
    public Computer getComputer() {
        return computer;
    }
}

客户测试

public class Main {
    public static void main(String[] args){
        MacComputerBuilder macComputerBuilder=new MacComputerBuilder("英特尔","金士顿");
        ComputerDirector.makeComputer(macComputerBuilder);
        Computer computer=macComputerBuilder.getComputer();
        System.out.println(computer.getCpu());
        System.out.println(computer.getKeyBoard());
        System.out.println(computer.getRam());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值