Builder 模式
来源:互联网 发布:手机照相摄像软件 编辑:程序博客网 时间:2024/06/18 11:34
Builder 模式
@(博客文章)[java]
参考《effetive java》
详细代码请见
当一个类中有很多属性,而且大部分属性为空时,如果要为这个类提供一个完整属性列表的构造函数的话,会使用这个类被调用时需要提供所有的参数,这会非常的麻烦。因为大部分属性都是为空的。
或者可以提供多个构造函数,分别适配不同的情形,但这样的话会导致构造函数非常多,而且调用这些构建函数时很容易混淆不同的参数(特别是这些参数有相同的类型)。
而Builder模式可以解决以上问题,它通过一个Builder类来构造一个对象,而不是以这个类的构造函数,同时以各种各样的setter方法对需要更改默认属性的进行设置。
下面的例子中,以一个person类为例,它的name属性是必选的,其它为可选。以下代码的输出为:ljh5113579246810unkowngz
/** * */package org.ljh.javademo.builderpatter;/** * date: 2016年3月4日 下午4:00:22 * * @author LUJINHONG lu_jin_hong@163.com Function: TODO ADD FUNCTION. last * modified: 2016年3月4日 下午4:00:22 */public class Person { private final String name; private final int age; private final int gender; private final String phoneNum; private final String email; private final String city; private Person(Builder builder) { name = builder.name; age = builder.age; gender = builder.gender; phoneNum = builder.phoneNum; email = builder.email; city = builder.city; } //Person类的其它公有方法,还可以有walk(), run(), eat()等。 public String getMessage(){ return name + age + gender + phoneNum + email + city; } public static class Builder { private String name; private int age = -1; private int gender = 1; private String phoneNum = "unkown"; private String email = "unkown"; private String city = "unkown"; public Builder(String name) { this.name = name; } public Person build(){ return new Person(this); } public Builder age(int age) { this.age = age; return this; } public Builder gender(int gender) { this.gender = gender; return this; } public Builder phoneNum(String phoneNum) { this.phoneNum = phoneNum; return this; } public Builder email(String email) { this.email = email; return this; } public Builder city(String city) { this.city = city; return this; } } //通过会有其它类中进行调用,这是为了方便,在本类中进行demo调用。 public static void main(String[] args){ Person ljh = new Person.Builder("ljh").age(5).gender(1).phoneNum("13579246810").city("gz").build(); System.out.println(ljh.getMessage()); }}
0 0
- builder 模式
- Builder模式
- Builder 模式
- Builder模式
- builder模式
- builder模式
- Builder模式
- builder模式
- Builder模式
- Builder 模式
- Builder 模式
- Builder模式
- Builder模式
- builder模式
- builder模式
- builder模式
- Builder模式
- Builder模式
- jQuery Mockjax使用总结
- js序列化json对象,并且添加
- Create SpringMVC+Mybatic
- initial job has not accepted any resources的spark错误解决办法
- RESTful API 设计指南
- Builder 模式
- Android 开源项目分类汇总
- UML常用图的几种关系的总结
- Spring/SpringMVC在启动完成后执行方法
- c# getipv4
- Lua中的面向对象[3]:再继承
- Linux终端常用指令收集
- IntelliJ IDEA 中文乱码问题解决办法(转)
- SQL Server读懂语句运行的统计信息