Java设计模式之Builder模式

本文探讨了Java设计模式中的Builder模式,解释了如何通过Builder模式提高代码可读性,尤其是在处理复杂对象构建时。文章以Person类为例,展示了如何创建私有构造函数和静态内部类Builder来实现优雅的初始化。Builder模式的应用场景包括Android中的对话框、通知创建以及OkHttp的Request构建等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Builder模式的定义很抽象:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。(不管它,直接看应用)

Builder模式在Android开发中的应用:通过创建静态内部类Builder的方式来给外部类初始化赋值,增加代码的可读性

 

一、例子:

假如有一个Person类,代码如下:

public class Person{
    
    private String name;
    private String place;
    private int age;
    private int height;
    private int weight;

    Person(String name,String place,int age,int height,int weight){
        this.name = name;
        this.place = place;
        this.age = age;
        this.height = height;
        this.weight = weight;
    }

}
    

Person类中有5个成员变量:姓名,籍贯,年龄,身高,体重。

创建Person实例:Person person = new Person("jack","beijing",23,170,59)。这样的传参方式可读性并不好,不看代码都不知道参数代表什么意思,当参数过多时也很麻烦。通过使用Builder设计模式可以很好的解决这个问题,代码如下:

public class Person{
    
    private String name;
    private String place;
    private int age;
    private int height;
    private int weight;

    private Person(Builder builder){
        this.name = builder.name;
        this.place = builder.place;
        this.age = builder.age;
        this.height = builder.height;
        this.weight = builder.weight;
    }

    static class Builder{
    
        private String name;
        private String place;
        private int age;
        private int height;
        private int weight;

        public Builder name(String name){
            this.name=name;
            return this;
        }
        public Builder place(String place){
            this.place=place;
            return this;
        }
        public Builder age(int age){
            this.age=age;
            return this;
        }
        public Builder height(int height){
            this.height=height;
            return this;
        }

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

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

        上述代码中,首先将Person类的构造函数设为private,参数为Builder实例。Builder是一个静态的内部类,它拥有和外部类一样的成员变量:name,place,age,height,weight,并且拥有和成员变量同名的成员方法,在成员方法中给Builder类对应的成员变量赋值。最后在build()方法中创建一个外部类Person实例,将内部类Builder的实例(this)传入。

通过Builder模式创建Person实例的方法为:

Person.Builder builder = new Person.Builder();

Person person = builder.name("jack").place("beijing").age(23).height(170).weight(59).build()。

即首先创建内部类Builder的实例builder,然后调用builder的成员方法给变量赋值,最后调用build()方法创建外部类实例,将赋值后的内部类实例作为参数传入,这样就将内部类赋值的成员变量赋值给了外部类的成员变量。

 

二、具体应用

在Android中应用了Builder设计模式给成员变量赋值的有:对话框的创建,通知的创建,网络框架OkHttp中Request的创建等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值