设计模式 创建者模式 -- 建造者模式扩展: 链式编程(解决构造函数参数列表过长的可读性问题)
Posted Z && Y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式 创建者模式 -- 建造者模式扩展: 链式编程(解决构造函数参数列表过长的可读性问题)相关的知识,希望对你有一定的参考价值。
1. 模式扩展: 链式编程
建造者模式在开发中还有一个常用的使用方式,就是当一个类构造器需要传入很多参数时,如果创建这个类的实例,代码可读性会非常差,而且很容易引入错误,此时就可以利用建造者模式进行重构。
1.1 重构前的代码
1.1.1 Phone 手机类
public class Phone {
private String cpu;
private String screen;
private String memory;
private String mainboard;
public Phone(String cpu, String screen, String memory, String mainboard) {
this.cpu = cpu;
this.screen = screen;
this.memory = memory;
this.mainboard = mainboard;
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getScreen() {
return screen;
}
public void setScreen(String screen) {
this.screen = screen;
}
public String getMemory() {
return memory;
}
public void setMemory(String memory) {
this.memory = memory;
}
public String getMainboard() {
return mainboard;
}
public void setMainboard(String mainboard) {
this.mainboard = mainboard;
}
@Override
public String toString() {
return "Phone{" +
"cpu='" + cpu + '\\'' +
", screen='" + screen + '\\'' +
", memory='" + memory + '\\'' +
", mainboard='" + mainboard + '\\'' +
'}';
}
}
1.1.2 Client 客户端类
public class Client {
//构建Phone对象
Phone phone = new Phone("intel", "三星屏幕", "金士顿", "华硕");
System.out.println(phone);
}
1.1.3 问题分析
上面在客户端代码中构建Phone对象,传递了四个参数,如果参数更多呢?代码的可读性及使用的成本就是比较高。
1.2 重构后代码
1.2.1 Phone 手机类
package com.tian.pattern.builder.demo2;
/**
* @Description: 手机类
*/
public class Phone {
private String cpu;
private String screen;
private String memory;
private String mainboard;
//私有构造方法
private Phone(Builder builder) {
this.cpu = builder.cpu;
this.screen = builder.screen;
this.memory = builder.memory;
this.mainboard = builder.mainboard;
}
@Override
public String toString() {
return "Phone{" +
"cpu='" + cpu + '\\'' +
", screen='" + screen + '\\'' +
", memory='" + memory + '\\'' +
", mainboard='" + mainboard + '\\'' +
'}';
}
public static final class Builder {
private String cpu;
private String screen;
private String memory;
private String mainboard;
public Builder cpu(String cpu) {
this.cpu = cpu;
return this;
}
public Builder screen(String screen) {
this.screen = screen;
return this;
}
public Builder memory(String memory) {
this.memory = memory;
return this;
}
public Builder mainboard(String mainboard) {
this.mainboard = mainboard;
return this;
}
//使用构建者创建Phone对象
public Phone build() {
return new Phone(this);
}
}
}
1.2.2 Client 客户端类
package com.tian.pattern.builder.demo2;
/**
* 客户端类
*/
public class Client {
public static void main(String[] args) {
//创建手机对象 通过构建者对象获取手机对象
Phone phone = new Phone.Builder()
.setCpu("intel")
.setScreen("三星屏幕")
.setMemory("金士顿内存条")
.setMainboard("华硕主板")
.build();
System.out.println(phone);
}
}
1.2.3 运行结果
1.2.4 说明
重构后的代码在使用起来更方便,某种程度上也可以提高开发效率。从软件设计上,对程序员的要求比较高。
以上是关于设计模式 创建者模式 -- 建造者模式扩展: 链式编程(解决构造函数参数列表过长的可读性问题)的主要内容,如果未能解决你的问题,请参考以下文章