创建型模式之建造者模式——链式调用

代码演示


本文源码:建造者模式 提取码: vpqt

目录结构

建议跟着一条学设计模式的小伙伴都建一个maven工程,并安装lombok依赖和插件。

并建立如下包目录,便于归纳整理。

pom如下

org.projectlombok

lombok

1.16.10

开发场景

现在有一个手机的建造者,我要让它为我生产不用品牌和配置的手机。该怎么实现?

代码演示

1.创建手机类

@Data

public class Phone {

//处理器

protected String cpu;

//内存

protected String mem;

//磁盘

protected String disk;

//屏幕大小

protected String size;

}

2.创建建造者接口

//定义建造者的模板方法

public interface Builder {

Phone phone = new Phone();

void buildCpu(String cpu);

void buildMem(String mem);

void buildDisk(String disk);

void buildSize(String size);

default Phone getPhone(){

return phone;

}

}

3.创建Vivo手机的建造者

public class VivoPhoneBuilder implements Builder{

//建造者细节的实现

@Override

public void buildCpu(String cpu) {

phone.cpu=cpu;

}

@Override

public void buildMem(String mem) {

phone.mem=mem;

}

@Override

public void buildDisk(String disk) {

phone.disk=disk;

}

@Override

public void buildSize(String size) {

phone.size=size;

}

}

4.创建测试类

public class MainTest {

public static void main(String[] args) {

VivoPhoneBuilder builder = new VivoPhoneBuilder();

builder.buildCpu(“888”);

builder.buildDisk(“512”);

builder.buildMem(“16”);

builder.buildSize(“plus”);

Phone phone = builder.getPhone();

System.out.println(phone);

}

}

5.输出结果

如果我这时需要生产OPPO手机,只需新建一个OppoPhoneBuilder实现Builder接口即可。

链式调用


相信大家在开发中都遇见过这样的代码,像链子一样可以一直调用下去。

那么如何实现链式建造者呢?

有以下两种方式:

1.修改返回值为Builder

public interface Builder {

Phone phone = new Phone();

// void 改为 Builder 同步修改实现类

Builder buildCpu(String cpu);

Builder buildMem(String mem);

Builder buildDisk(String disk);

Builder buildSize(String size);

default Phone getPhone(){

return phone;

}

}

测试1

public class MainTest {

public static void main(String[] args) {

// ……

VivoPhoneBuilder builder2 = new VivoPhoneBuilder();

Phone phone1 = builder2

.buildCpu(“888”)

.buildDisk(“512”)

.buildMem(“16”)

.buildSize(“plus”)

.getPhone();

System.out.println(“phone1:”+phone1);

}

}

结果1

2.使用lombok

@Data

@Builder //使用链式建造者

@NoArgsConstructor

@AllArgsConstructor

public class Phone {

// ……

}

测试2

public class MainTest {

public static void main(String[] args) {

// ……

Phone build = Phone.builder()

.cpu(“888”)

.mem(“16”)

.disk(“512”)

.size(“plus”).build();

System.out.println(“builder:”+build);

}

}

结果2

应用场景


  • StringBuilder:append(); 给谁append呢?

public AbstractStringBuilder append(String str) {

if (str == null)

return appendNull();

int len = str.length();

ensureCapacityInternal(count + len);

str.getChars(0, len, value, count);

count += len;

return this;

}

  • Swagger-ApiBuilder;

  • 快速实现:Lombok-@Builder

总结



  • StringBuilder:append(); 给谁append呢?

public AbstractStringBuilder append(String str) {

if (str == null)

return appendNull();

int len = str.length();

ensureCapacityInternal(count + len);

str.getChars(0, len, value, count);

count += len;

return this;

}

  • Swagger-ApiBuilder;

  • 快速实现:Lombok-@Builder

总结


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值