Builder模式解决构造函数多参数阅读性不好问题
来源:互联网 发布:vm虚拟机ubuntu性能 编辑:程序博客网 时间:2024/05/19 02:24
在设计模式中对Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成。那么,在实际的开发过程中,我们哪些地方适合用到Builder模式呢?其中使用Builder模式来替代多参数构造函数是一个比较好的实践法则。
我们常常会面临编写一个这样的实现类(假设类名叫DoDoContact),这个类拥有多个构造函数,
DoDoContact(String name);
DoDoContact(String name, int age);
DoDoContact(String name, int age, String address);
DoDoContact(String name, int age, String address, int cardID);
这样一系列的构造函数主要目的就是为了提供更多的客户调用选择,以处理不同的构造请求。这种方法很常见,也很有效力,但是它的缺点也很多。类的作者不得不书写多种参数组合的构造函数,而且其中还需要设置默认参数值,这是一个需要细心而又枯燥的工作。其次,这样的构造函数灵活性也不高,而且在调用时你不得不提供一些没有意义的参数值,例如,DoDoContact("Ace", -1, "SH"),显然年龄为负数没有意义,但是你又不的不这样做,得以符合Java的规范。如果这样的代码发布后,后面的维护者就会很头痛,因为他根本不知道这个-1是什么含义。对于这样的情况,就非常适合使用Builder模式。Builder模式的要点就是通过一个代理来完成对象的构建过程。这个代理职责就是完成构建的各个步骤,同时它也是易扩展的。
public class PersonModel { private int age; private int length; private int siz; private String name; private String address; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getLength() { return length; } public void setLength(int length) { this.length = length; } public int getSiz() { return siz; } public void setSiz(int siz) { this.siz = siz; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public static class PersonBuilder{ private int age; private int length; private int siz; private String name; private String address; /** * 以下是为多个数据赋值,返回同一个对象 * @param value * @return */ public PersonBuilder age(int value){ this.age=value; return this; } public PersonBuilder length(int vale){ this.length=vale; return this; } public PersonBuilder siz(int vale){ this.siz = vale; return this; } public PersonBuilder name(String value){ this.name = value; return this; } public PersonBuilder address(String value){ this.address=value; return this; } /** * 用于生成Builder对象,当然可以加上必要的参数 */ public PersonBuilder (){ } /** * 用于生成我们要构建的对象 * @return */ public PersonModel build(){ return new PersonModel(this); } } /** * 提供私有的构造方法,通过构造器来给所需要的参数赋值 * @param builder */ private PersonModel(PersonBuilder builder){ this.name = builder.name; this.address =builder.address; this.age=builder.age; this.siz=builder.siz; this.length=builder.length; }}
客户端调用
public class BuilderTest { public static void main(String[] args) { PersonModel build = new PersonModel.PersonBuilder().name("zs").age(10).length(20).address("北京").build(); System.out.println(build.getName()); }}
- Builder模式解决构造函数多参数阅读性不好问题
- Java 使用Builder解决构造函数参数过多的问题
- Java (Builder 模式) 解决Contruct构造器中参数过长的问题
- 多个构造参数考虑使用Builder构造器模式
- 第二条 多构造参数用 Builder模式
- 多个构造器参数考虑用Builder模式
- Builder模式--用于多个构造器参数时使用
- 设计模式:Builder模式(多个构造器参数时可显著改善可读性)
- 一个超强的变builder模式构建多参数构造器
- 使用Builder模式构建可扩展的多个参数构造器
- java中使用Builder模式构建多个参数的构造器
- effective java--遇到多个构造器参数最好使用Builder模式
- c++构造函数参数问题
- 多参构造器与Builder模式
- Builder模式处理多个构造器
- 构造模式(Builder Pattern)
- 构造者(Builder)模式
- 技术问题不好解决
- 数据结构——队列
- spark transform系列__cogroup
- LeetCode(35)-Search Insert Position
- Shell脚本语言与编译型语言的差异
- 135 js 高程6.1
- Builder模式解决构造函数多参数阅读性不好问题
- 通知栏的相关用法记录
- TableViewCell的复用出现数据重复的解决方法
- MAC系统格式化后的U盘在WIN系统上不显示盘符的解决办法
- iOS 调试 crash breakpoint EXC_BAD_ACCESS SIGABRT方法总结
- 什么是java虚拟机,他又在哪里?
- Shell简介:什么是Shell,Shell命令的两种执行方式
- 几种常见的Shell
- Android Studio gradle的基本用法