彻底明白Android设计模式—建造者模式

建造者模式将复杂对象的构建与表示分离,允许用户仅通过指定关键参数即可创建对象,无需关注构建细节。在Android中,如Dialog的构建经常使用此模式,提供链式API以简化对象创建,确保参数正确并提高代码可读性。
摘要由CSDN通过智能技术生成

将一个复杂对象的 构建和表示 分离的模型
什么意思呢,就是比如我要创建一个对象,我只需要把最重要的一些信息告诉他,他就可以帮我完成所有的事情,不需要了解具体的构建过程

接下来,我们直接实现一个建造者模式示例代码

比如,我要制造一个手机,建造者模式可以让我不用了解到具体手机怎么生产的,只需要提供手机的一些参数,比如颜色,系统等,就可以制造出一个完整的手机了。

/**
     * 手机产品实体类,定义手机的一些属性(颜色,系统)
     */
    public class Phone {
        private String color;
        private String os;

        public String getColor() {
            return color;
        }

        public void setColor(String color) {
            this.color = color;
        }

        public String getOs() {
            return os;
        }

        public void setOs(String os) {
            this.os = os;
        }
    }

    /**
     * 抽象的构建类
     */
    public abstract class Builder {
        public abstract void buildColor(String color);

        public abstract void buildOs(String os);
    }

    /**
     * 具体的构建类
     */
    public class HuaweiBuilder extends Builder {
        private Phone huaweiPhone = new Phone();

        @Override
        public void buildColor(String color) {
            huaweiPhone.setColor(color);
        }

        @Override
        public void buildOs(String os) {
            huaweiPhone.setOs(os);
        }

        public Phone getHuaweiPhone() {
            return huaweiPhone;
        }
    }

    /**
     * 导演类,导演所有的一切,构建对象的各个部分
     * 其实这就有点像什么,像做了一些简单的封装,
     * 让外面的人可以轻易的创建具体需要的对象,
     * 而不用知道里面做了啥
     */
    public class Director {
        Builder mBuilder;

        public Director(Builder builder) {
            this.mBuilder = builder;
        }

        public void constract(String color, String os) {
            mBuilder.buildColor(color);
            mBuilder.buildOs(os);
        }
    }

以上就是建造者模式完整一条链的代码了。
现在我要制造一个手机就很简单了,如下

    public void main() {
        Builder builder = new HuaweiBuilder();
        Director director = new Director(builder);
        director.constract("黄色", "Android");
    }

通过简单的传参,创建生产对象。
但是其实一般不这么做,而是通过内部类方法通过builder的一种***链式表达构建对象***,比如dialog构建等,这里也举例说明:

public static class XiaomiPhone {
        private String color;
        private String os;

        private XiaomiPhone(Builder builder) {
            this.color = builder.color;
            this.os = builder.os;
        }

        public String getColor() {
            return color;
        }

        public String getOs() {
            return os;
        }

        static class Builder {
            private String color;
            private String os;

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

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

            public XiaomiPhone builder() {
                return new XiaomiPhone(this);
            }
        }
    }

然后我们实现起来就比较简单了

public void main() {
        XiaomiPhone xiaomiPhone = new XiaomiPhone.Builder()
                .setColor("")
                .setOs("")
                .builder();
    }

在Android中的应用

哇,简直不要太常见,dialog构建怎么写的?

AlertDialog.Builder builder = new AlertDialog.Builder(this).setIcon(R.mipmap.ic_launcher).setTitle("")
                .setMessage("").setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                    
                    }
                }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                       
                    }
                });
        builder.create().show();

为什么用建造者模式呢?其实就是方便用户使用的时候,知道要传哪些参数,方便且正确。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值