设计模式--Bulider模式
起因:最近在做统计计算,创建的实体中属性比较多,都是一些数值,一开始是通过get、set方法进行赋值,占用了很多业务代码方法的长度,可读性不太好,后来改用了添加构造器的方式,稍显精简了一点,但是每次赋值的时候都都必须注意是不是对应上了。最后决定改用Bulider模式,确实好用很多。
下面通过一个实际的demo看一下效果
package com.github.xsh.demo.model;
/**
* @description:
* @date: 2019/5/16
**/
public class Student {
private int id;
private String name;
private String passwd;
private String sex;
private String address;
private Student(Builder builder) {
this.id = builder.id;
this.name = builder.name;
this.passwd = builder.passwd;
this.sex = builder.sex;
this.address = builder.address;
}
/**
* Builder
*/
public static class Builder {
private int id;
private String name;
private String passwd;
private String sex;
private String address;
public Builder(int id, String name) {
this.id = id;
this.name = name;
}
public Builder passwd(String passwd) {
this.passwd = passwd;
return this;
}
public Builder sex(String sex) {
this.sex = sex;
return this;
}
public Builder address(String address) {
this.address = address;
return this;
}
public Student build() {
return new Student(this);
}
}
@Override
public String toString() {
return String.format("%s[id=%s, name=%s, passwd=%s, sex=%s, address=%s]",
getClass().getSimpleName(), id, name, passwd, sex, address);
}
//为了使阅读简洁,此处省略getter setter
}
@Test
public void buliderTest(){
Student student = new Student.Builder(1,"jack")
.sex("男士")
.address("地球村")
.passwd("1232")
.build();
//先填充属性再构建除对象,看上去是不是逼格满满
System.out.println(student);
}
打印结果如下:
Student[id=1, name=jack, passwd=1232, sex=男士, address=地球村]
最后做一下总结,什么是Bulider模式:
不直接生成想要的对象,而是让客户端利用所有必要的参数调用构造器(或者静
态工厂),得到一个 builder 对象 。 然后客户端在 builder 对象上调用类似于 setter 的方法,来设置每个相关的可选参数。最后客户端调用无参的build方法来生成通常是不可变的对象
参考阅读:《Effective java(第3版)》第 2 条:遇到多个构造器参数时要考虑使用构建器
本人首发于个人公众号:河岸飞流 欢迎订阅
原文地址:https://mp.weixin.qq.com/s/Tr5rQGnDPti90hTwwHAKzQ
设计模式--Bulider模式的更多相关文章
- .NET设计模式访问者模式
一.访问者模式的定义: 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 二.访问者模式的结构和角色: 1.Visitor 抽象访问者角色,为该 ...
- [Head First设计模式]饺子馆(冬至)中的设计模式——工厂模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- [Head First设计模式]抢票中的设计模式——代理模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- [Head First设计模式]策略模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- [Head First设计模式]餐馆中的设计模式——命令模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- [Head First设计模式]生活中学设计模式——迭代器模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- [Head First设计模式]生活中学设计模式——组合模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- [Head First设计模式]生活中学设计模式——外观模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- [Head First设计模式]生活中学设计模式——状态模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
随机推荐
- NIO网络访问模式实践
1.创建NioNest12类 一个线程监听5个端口的事件 public class NioTest12 { public static void main(String[] args) throws ...
- 【深入学习linux】在linux系统下怎么编写c语言程序并运行
1. 首先安装下 gcc : centos yum -y gcc 2. 编写c程序保存hello.c: #include <stdio.h> #include <stdlib.h&g ...
- win7上手机ADB interface无法安装驱动
解决办法: https://blog.csdn.net/riyuexingchen1204/article/details/84594061
- java合并多个word 2007 文档 基于docx4j
参考文章:http://dh.swzhinan.com/post/185.html 引入的jar包 <dependency> <groupId>org.docx4j</g ...
- Sequelize模糊查询
const Sequelize = require('sequelize'); const Op = Sequelize.Op; User.findAll({ raw: true, order: [ ...
- Android设置顶部banner背景透明度时影响全局背景问题
项目中用到滑动界面使顶部title栏背景渐隐渐现的效果,即初始不滑动时的透明度为0,用了bannerle.getBackground().setAlpha(0); 但使用这个方法设置透明度是管用,返回 ...
- Operation之变换操作符
buffer buffer方法的作用是缓冲组合, 第一个参数是缓冲时间, 第二个参数是缓冲个数, 第三个参数是线程 该方法简单来说就是缓存Observable中发出的新元素, 当元素达到某个数量, 或 ...
- ios评分功能实现
/** * 只能评分,不能编写评论 * 有次数限制,一年只能使用三次 * 使用次数超限后,需要跳转appstore */ - (IBAction)systemComentBtnAction:( ...
- Html JavaScript网页制作与开发完全学习手册
Html JavaScript网页制作与开发完全学习手册 篇 HTML技术章 HTML入门 1.1 什么是HTML 1.1.1 HTML的特点 1.1.2 HTML的历史 1.2 HTML文件的基本结 ...
- iOS - 判断程序每天只执行一次
当进行操作的时候记录操作时间存在偏好设置当中,当再次点击的时候获取现在的时间然后和之前记录的时间进行比较.如果是一天那么就提示“今天已经操作过了”,如果不是一天,那么可以正常操作,然后记录操作时间.如 ...