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模式的使用了,是不是很方便。

ok,到这里今天需要分享的文章就结束了,喜欢文章的可以关注下公众号,分享,转发一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值