专栏首页后端CoderJava之Builder模式的设计实现

Java之Builder模式的设计实现

hello,你好,很高兴在这里遇到你,今天我们要分享的一点是关于设计模式的Builder模式。

之所以会写这篇文章,其实是有原因的,自己整理了一篇文章是关于Lombok的介绍和使用的文章,它里面涉及到了今天我们想要分享的设计模式Builder模式。

建议在阅读这篇文章之前,请先移步到java开发人员需要掌握的链式编程这里了解一下关于链式编程是如何实现的,为什么会我会写链式编程呢。

还是一贯的风格来写文章吧,希望自己可以摸索出属于自己的写作文章思路,坏笑。

ok,我们下面看下Builder模式的示例程序好了。

Tips:左右滑动可以看完整代码信息。

import java.util.Date;

public class BuilderTest {
    public static void main(String[] args) {
        User user=new User();
        user.setName("感谢关注微信公众号~后端Coder");
        user.setAge(1);
        System.out.println("user = " + user);//user = User{name='感谢关注微信公众号~后端Coder', age=1, birthday=null, IdCard='null', height=null, weight=null}
    }
    static class User{
        private String name;
        private Integer age;
        private Date birthday;
        private String IdCard;
        private Integer height;
        private Integer weight;

        public User() {
        }

        public User(String name, Integer age) {
            this.name = name;
            this.age = age;
        }

        public User(String name, Integer age, Date birthday, String idCard, Integer height, Integer weight) {
            this.name = name;
            this.age = age;
            this.birthday = birthday;
            IdCard = idCard;
            this.height = height;
            this.weight = weight;
        }

        public void setName(String name) {
            this.name = name;
        }

        public void setAge(Integer age) {
            this.age = age;
        }

        @Override
        public String toString() {
            return "User{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", birthday=" + birthday +
                    ", IdCard='" + IdCard + '\'' +
                    ", height=" + height +
                    ", weight=" + weight +
                    '}';
        }
    }
}

ok,我们先分析上面的示例程序好了,我们要实现的内容就是为创建的对象user赋值,然后打印输出信息,一般我们都是使用new关键字进行无参构造函数的创建,然后调用set方法进行赋值操作。

User user=new User();
 user.setName("感谢关注微信公众号~后端Coder");
 user.setAge(1);
 System.out.println("user = " + user);//user = User{name='感谢关注微信公众号~后端Coder', age=1, birthday=null, IdCard='null', height=null, weight=null}

上面的传统方法的实现,你应该会了,下面我们继续看下后面的另外的一种方式,使用带参构造函数来创建对象和赋值,还是看示例程序代码吧。

  User user=new User("后端Coder",1);
  System.out.println("user = " + user);

是不是比上面一步一步赋值看的简洁了许多,或许是,或许不是,在这里你有没有思考过这样一个问题,一般创建一个类的时候成员属性不仅仅只有三五个,十几个成员属性或者几十个成员属性都要设置,无论我们采用第一种方式进行set,还是第二种方式进行构造函数传参,都失为一种明智做法。

在这里还是说明一下利用构造函数传参的方式对于调用者来说极为不方便,建议成员属性太多的时候还是别使用带参这种构造函数了。

下面,我们看下今天Builder模式是如何发挥它的价值的吧。来来来,我们还是先走个示例程序。

public class BuilderTest {
    public static void main(String[] args) {
        Worker worker = new Worker.Builder().id(1).name("后端Coder").age(1).sex("男").build();
        System.out.println(worker);//Worker{id=1, name='后端Coder', sex='男', age=1}

    }

    public static class  Worker {
        private int id;
        private String name;
        private String sex;
        private int age;


        @Override
        public String toString() {
            return "Worker{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", sex='" + sex + '\'' +
                    ", age=" + age +
                    '}';
        }

        public static class Builder {
            private int id;
            private String name;
            private String sex;
            private int age;


            public Builder() {

            }

            public Builder id(int id) {
                this.id = id;
                return this;
            }

            public Builder name(String name) {
                this.name = name;
                return this;
            }

            public Builder sex(String sex) {
                this.sex = sex;
                return this;
            }

            public Builder age(int age) {
                this.age = age;
                return this;
            }

            public Worker build() {
                return new  Worker(this);
            }

        }

        private  Worker(Builder builder) {
            this.id = builder.id;
            this.name = builder.name;
            this.sex = builder.sex;
            this.age = builder.age;
        }
    }
}

我们接下来分析下上面的示例程序就可以结束这篇文章了。

在Worker类里面定义一个静态内部类Builder类,在静态内部类里面使用链式编程的方式为对应的属性进行赋值java开发人员需要掌握的链式编程创建我们需要的Worker对象,最后输出我们创建的worker信息,这就是Builder模式的使用了,是不是很方便。

本文分享自微信公众号 - WwpwW(gh_245290c1861a),作者:后端Coder

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 业务解耦-事件监听模式的使用

    事件监听机制有点类似于sub/pub模式,不过这个技术点也仅适用于单体应用的范围,分布式应用还是老老实实使用消息队列来进行吧。

    后端Coder
  • java之Lombok

    针对上面的介绍,我们简要说下它,首先它是一个java库,它通过注解的方式使你不用再为成员属性生成get/set等其它方法,就是说它简化了你程序的代码了,使程序的...

    后端Coder
  • java之StopWatch源码分析

    计时这个词语在生活中被应用的很普遍,体育竞赛时频繁出现的秒表,发令信号一经发出,秒表就在滴答滴答流转开始计时了,秒表此时的作用就是计时的代名词,在我们编写代码的...

    后端Coder
  • Java ConcurrentModificationException异常原因和解决方法

    小小明童鞋
  • 自定义泛型实例

    public class UserDefined { public static void main(String[] args) { ...

    MonroeCode
  • Java抽象類實例

    葆宁
  • Java基础-day09-代码题-对象;类;封装

    Java基础-day09-代码题-对象&类&封装 一、定义一个空调类和对应的测试类 该题考查点:属性和方法的使用! 要求: 1、空调有品牌和价格两个属性,并且将...

    Java帮帮
  • 第十三章:图片资源打包器(TexturePacker)TexturePacker介绍TexturePacker 下载使用TextureAtlaspack文件格式

    1.介绍:TexturePacker 是一款把若干张资源图片拼接为一张大图的工具。 2.特点: - 1.提高载入速度 把小图拼接成一张大图,一次载入,减少...

    Xiaolei123
  • Java 反射,开发框架必备技能

    反射一般开发者接触不到,反射主要用户框架的开发。例如我举一个例子你就明白了: http://www.netkiller.cn/news/list/2.html...

    netkiller old
  • 快速掌握this

    在Java语言中,当创建一个对象后,Java虚拟机就会为其分配一个指向该对象本身的指针,这个指针就是this。this只能用于在类的非静态方法或者构造方法中,在...

    用户4143945

扫码关注云+社区

领取腾讯云代金券