Android设计模式之—Builder模式

本文通过一个具体的Person类实例,介绍了Builder模式的基本概念及其在提高代码可读性和维护性方面的作用,并对比了传统构造方法与Builder模式的优劣。

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

Builder模式也是很常用的一个模式,比如Android中的AlertDialog使用的就是Builder设计模式,下面举个例子来理解一下.

1.首先我们先创建一个Person类

class Person {
    public String name; //姓名
    public int age; //年龄
    public int income; //收入

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public int getIncome() {
        return income;
    }

    public void setIncome(int income) {
        this.income = income;
    }
}

2.为了更方便的赋值,我们可能还会加个构造方法

    public Person(String name, int age, int income) {
        this.name = name;
        this.age = age;
        this.income = income;
    }

3.下面我们来给这个Person类赋值

    public static void main(String[] args) {
        Person Person = new Person("吕凯旋",23,8888);
    }

4.假如别人用你的Person类,嗯…第一个参数应该是姓名,第二个参数…猜一下可能是年龄吧,第三个是什么鬼?这时就不得不戳进源码查看,举这个例子就是想让你知道,这样写的话,代码的阅读性不是太好,下面使用Builder模式来写

class Person {
    public String name; //姓名
    public int age; //年龄
    public int income; //收入

    private Person(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.income = builder.income;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public int getIncome() {
        return income;
    }

    public void setIncome(int income) {
        this.income = income;
    }

    //静态内部类
    public static class Builder{
        private String name; //姓名
        private int age; //年龄
        private int income; //收入

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

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

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

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

5.可以看到我们定义了一个静态内部类,然后用私有构造方法来接收这个内部类并赋值

    private Person(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.income = builder.income;
    }

6.下面我们来给Person类进行赋值

        new Person.Builder()
                .name("吕凯旋")
                .age(23)
                .income(8888)
                .build();

对比一下上面的就可以发现,大大提高了代码的阅读性,让别人更容易理解,AlertDialog使用的就是这个模式,有兴趣的小伙伴可以去阅读一下源码.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值