设计模式-建造者

原创 2016年08月30日 15:10:12

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

比如一个消息类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();
    }
}

参数的含义变得更加明确

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C#设计模式--建造者模式

  • 2017-02-20 19:55
  • 33KB
  • 下载

设计模式读书笔记:Builder(建造者)

意图: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

C# 设计模式-建造者模式

  • 2013-04-09 10:41
  • 26KB
  • 下载

设计模式-建造者

1.场景:建造一个复杂的产品,或者构建一个复杂对象需要很多步骤,而且步骤之间有一定的顺序 2.本质: 分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。...

建造者设计模式

建造者模式将一个复杂对象的构建与他的表示相分离,使得同样的构建过程可以创建不同的表示好处: 将产品的生产部分化,流水线化,然后组装产品,有利于产品的完整.... 3个类: 产...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)