设计模式--Bulider模式
程序员文章站
2022-05-14 12:05:30
`起因:`最近在做统计计算,创建的实体中属性比较多,都是一些数值,一开始是通过get、set方法进行赋值,占用了很多业务代码方法的长度,可读性不太好,后来改用了添加构造器的方式,稍显精简了一点,但是每次赋值的时候都都必须注意是不是对应上了。最后决定改用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
上一篇: day 88 Vue学习之八geetest滑动验证
下一篇: layDate 日期与时间组件 入门