Java设计模式-建造者模式

简介

  1. 定义:

    建造者模式的目的是为了分离对象属性和创建过程的(封装对象的建造过程和细节,对外提供创建对象的方法)

  2. 作用:
    1. 方便用户创建复杂对象
    2. 提高代码复用性(将对象构建过程进行封装)

实现方式

  1. 一般会有以下几个角色

    客户(Client):调用指挥者来获取复杂对象

    产品(Product):描述一个由一系列部件组成的复杂对象

    抽象建造者(Builder):用于稳定具体建造者的公共接口,一般定义建造细节的方法

    具体建造者(ConcreteBuilder):实现抽象建造者接口,并描述具体建造细节

    指挥者(Director):调用具体建造者来创建复杂对象的各个组成部分,并按一定顺序建造复杂对象

  2. 具体例子

    电脑城卖电脑 的例子来讲解

电脑为具体产品,硬件配置为产品属性。
现在客户去到电脑城买电脑,但是不知道具体的硬件配置,电脑城就将电脑按用途分类为低档、中档、高档、超高档,
并写了一套规范用于稳定装机人员的装机过程,客户只需要告诉服务员需要什么用途的电脑,服务员就根据客户提供的信息指挥装机人员进行装机,并将装好的电脑给到客户。

在这里,有几个重点对象:

  • 客户=Client
  • 电脑=Product
  • 装机规范=Builder
  • 装机人员=Concrete
  • 服务员=Director

代码实现

1. 具体的产品
public class Computer {
    private String cpu;//处理器
    private String memory;//内存
    private String vc;//显卡

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getMemory() {
        return memory;
    }

    public void setMemory(String memory) {
        this.memory = memory;
    }

    public String getVc() {
        return vc;
    }

    public void setVc(String vc) {
        this.vc = vc;
    }

    @Override
    public String toString() {
        return "Computer{" +
                "cpu='" + cpu + '\'' +
                ", memory='" + memory + '\'' +
                ", vc='" + vc + '\'' +
                '}';
    }
}
2. 定义建造者接口,规范建造者实现类
public interface ComputerBuilder {
    void setCpu();
    void setMemory();
    void setVc();
    Computer build();
}
3. 定义具体建造者,实现建造者接口,并实现具体方法
public class ComputerBuilder01 implements ComputerBuilder {
    private Computer computer = new Computer();

    public Computer build(){
        return computer;
    }

    @Override
    public void setCpu() {
        computer.setCpu("i5 7代");
    }
    @Override
    public void setMemory() {
        computer.setMemory("512G");
    }
    @Override
    public void setVc() {
        computer.setVc("GTX1050");
    }
}

public class ComputerBuilder02 implements ComputerBuilder {
    private Computer computer = new Computer();

    public Computer build(){
        return computer;
    }

    @Override
    public void setCpu() {
        computer.setCpu("i7 7代");
    }
    @Override
    public void setMemory() {
        computer.setMemory("1T");
    }
    @Override
    public void setVc() {
        computer.setVc("GTX1060");
    }
}

public class ComputerBuilder03 implements ComputerBuilder {
    private Computer computer = new Computer();

    public Computer build(){
        return computer;
    }

    @Override
    public void setCpu() {
        computer.setCpu("i9 7代");
    }
    @Override
    public void setMemory() {
        computer.setMemory("2T");
    }
    @Override
    public void setVc() {
        computer.setVc("RTX2080");
    }

4. 定义指挥者,使用具体建造者来创建对象
public class Director {

    public Computer build(ComputerBuilder computerBuilder){
        computerBuilder.setCpu();
        computerBuilder.setMemory();
        computerBuilder.setVc();
        return computerBuilder.build();
    }
}
5. 客户
 @Test
    public void test04(){
        Director director = new Director();

        ComputerBuilder01 b1 = new ComputerBuilder01();
        Computer computer1 = director.build(b1);
        System.out.println(computer1);

        ComputerBuilder02 b2 = new ComputerBuilder02();
        Computer computer2 = director.build(b2);
        System.out.println(computer2);

        ComputerBuilder03 b3 = new ComputerBuilder03();
        Computer computer3 = director.build(b3);
        System.out.println(computer3);
    }

参考文档

https://www.runoob.com/design-pattern/builder-pattern.html

完成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值