前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式--Bulider模式

设计模式--Bulider模式

作者头像
河岸飞流
发布2019-08-08 16:30:19
2730
发布2019-08-08 16:30:19
举报
文章被收录于专栏:开发杂记开发杂记

起因:最近在做统计计算,创建的实体中属性比较多,都是一些数值,一开始是通过get、set方法进行赋值,占用了很多业务代码方法的长度,可读性不太好,后来改用了添加构造器的方式,稍显精简了一点,但是每次赋值的时候都都必须注意是不是对应上了。最后决定改用Bulider模式,确实好用很多。

下面通过一个实际的demo看一下效果

代码语言:javascript
复制
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);
        }

打印结果如下:

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档