设计模式-建造者

原创 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
  • 下载

设计模式实验报告-建造者

  • 2011年12月29日 21:01
  • 34KB
  • 下载

设计模式(4)--Builder 建造者(构建器)

Builder和工厂模式一样,都是创建对象类型的模式。同样是创建类型的模式,其区别在于:Builder是应用于更为复杂的对象创建过程。举例说明:生产一辆玩具车,一个工厂一个方法就搞定了。而要生产一辆汽...
  • Face3
  • Face3
  • 2016年01月28日 16:51
  • 373

设计模式之建造者模式代码示例

  • 2017年08月20日 14:48
  • 44KB
  • 下载

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

  • 2013年04月09日 10:41
  • 26KB
  • 下载

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

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

C#设计模式-建造者模式手机例子

  • 2017年02月20日 19:56
  • 36KB
  • 下载

大话设计模式之建造者模式

  • 2012年02月03日 14:36
  • 213KB
  • 下载

设计模式-建造者

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

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

  • 2016年06月10日 21:38
  • 4KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式-建造者
举报原因:
原因补充:

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