设计模式-建造者

应用场景:某些类在构建的时候需要传递多个参数,或者含有大量的可选参数时,使用普通的构造器时,如果参数数量过多,那参数传递的顺序和含义记忆起来就会比较麻烦。如果包含着大量的可选参数,那每次构建类时传递这些无实际作用的参数就显得没有意义,这个时候构建器是比较合适的选择。

比如一个消息类Message ,实际构建的时候并不是所有的字段都会用的

public class Message {

    private final String message;
    private final String pic;
    private final String voice;
    private final int voiceLength;
    private final int method;

    public static class Builder {

        private String message = "";
        private String picUrl = "";
        private String voiceUrl = "";
        private int voiceLength = 0;
        private int method = 0;


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

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

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

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

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

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

    private Message(Builder builder) {
        this.method = builder.method;
        this.message = builder.message;
        this.pic = builder.picUrl;
        this.voice = builder.voiceUrl;
        this.voiceLength = builder.voiceLength;
    }

}

调用方式

public class MainActivity extends Activity  {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Message message = new Message.Builder()
                .setMessage("hello world")
                .setMethod(1)
                .build();

        Message message1 = new Message.Builder()
                .setPicUrl("")
                .setMethod(2)
                .build();

        Message message2 = new Message.Builder()
                .setVoiceUrl("")
                .setVoiceLength(0)
                .setMethod(3)
                .build();
    }
}

参数的含义变得更加明确

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值