设计模式-建造者模式

1.建造者模式概述

建造者模式就是将一个复杂对象的构建和表示分开。
建造者模式的组成部分:

  • 抽象建造者类(builder):定义组成复杂对象的部件的创建,是抽象类。
  • 具体建造者类(Concrete Builder):继承自builder,实现各个部件的创建,并且创建完成之后提供产品的实例。
  • 产品(product):要创建的复杂对象。
  • 指挥者类(Director):调用具体建造者类,以某种顺序完成各个部件的创建并返回。

UML类图如图:

在这里插入图片描述

根据上述UML图,转化的代码如下:
抽象builder:

public abstract class Builder {
    protected Computer computer=new Computer();
    public abstract void buildCpu();
    public abstract void buildMainPanel();
    public abstract void buildScreen();
    public abstract Computer getRes();
}

产品类:

public class Computer {
    private String cpu;
    private String mainPanel;
    private String screen;
    public void setCpu(String cpu) {
        this.cpu = cpu;
    }
    public void setMainPanel(String mainPanel) {
        this.mainPanel = mainPanel;
    }
    public void setScreen(String screen) {
        this.screen = screen;
    }
    public String getCpu() {
        return cpu;
    }
    public String getMainPanel() {
        return mainPanel;
    }
    public String getScreen() {
        return screen;
    }
}

ConcreteBuilder类:

public class LenovoBuilder extends Builder{
    @Override
    public void buildCpu() {
        computer.setCpu("联想cpu");
    }

    @Override
    public void buildMainPanel() {
        computer.setMainPanel("联想主板");
    }

    @Override
    public void buildScreen() {
        computer.setScreen("联想屏幕");
    }

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

指挥者类:

   public class Director {
    private Builder builder;

    public Director(Builder builder){
        this.builder=builder;
    }
    public void setBuilder(Builder builder){
        this.builder=builder;
    }
    public Computer construct(){
        builder.buildCpu();
        builder.buildMainPanel();
        builder.buildScreen();
        return builder.getRes();
    }

实际上只要把UML类图和建造者模式的几个组成部分记忆并理解,对上述的代码就很好理解。

2.扩展

  • 实际上当构造过程步骤不那么繁杂的时候,我们可以把construct方法放在builder中。即不需要Director类帮助组装并建造。但是这样违背了单一职责原则。
  @Override
    public Computer getRes() {
        buildCpu();
        buildMainPanel();
        buildScreen();
        return computer;
    }

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值