设计模式-建造者

原创 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();
    }
}

参数的含义变得更加明确

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

设计模式:建造者模式(Builder)

建造者模式:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。  建造者模式通常包括下几个角色: 1. builder(抽象建造者):给出一个抽象结论,以规范产品对象的...
  • u013256816
  • u013256816
  • 2016年03月25日 11:18
  • 2062

设计模式(建造者与模板方法)

设计模式(建造者与模板方法) 这篇文章用来总结一下工作一些设计思想。 以前记得我们的CTO跟我们说过,“Java是一门面向对象的语言,不要把他写成了C语言(面向...
  • qq1013598664
  • qq1013598664
  • 2016年10月06日 22:38
  • 276

设计模式------存在意义

建造者模式产生的意思? 每种设计模式都是为了解决某一类而问题出现的,建造者模式也不例外。场景如下:有一个对象,如House对象,有很多属性,经常要改变对象属性值,既然是创建型模式,肯定不会让客户端创建...
  • jim_007
  • jim_007
  • 2017年12月28日 16:59
  • 39

Kotlin 设计模式-建造者

Kotlin 设计模式-建造者
  • soslinken
  • soslinken
  • 2017年06月16日 17:12
  • 1250

设计模式——建造者

最近的心得,我发现学一门设计模式,不管你是否能立刻理解它,第一最要紧的是要记住两个东西。1、它是属于什么范畴的设计模式。2、记住UML图。这两个是打开这个设计模式之门的金钥匙!为什么这么讲?因为刚刚学...
  • hello_haozi
  • hello_haozi
  • 2014年08月25日 14:17
  • 16210

PHP设计模式——建造者模式

声明:本系列博客参考资料《大话设计模式》,作者程杰。        建造者模式也称生成器模式,核心思想是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为...
  • jhq0113
  • jhq0113
  • 2015年04月25日 11:30
  • 2622

【设计模式】外观和建造---总结

优点 缺点 特点 背景 感受 UML
  • zhangmeihong2
  • zhangmeihong2
  • 2015年01月24日 23:42
  • 1371

架构设计五之建造者模式和责任链模式

前言        建造者模式在设计模式中还算是一个用的比较多的设计模式,建造者设计模式的核心在于隐藏内部构建细节,通过外部的Builder来实现构建。Builder负责Product类对象的具体过程...
  • hpc19950723
  • hpc19950723
  • 2017年05月07日 14:22
  • 356

[设计模式](二)外观模式和建造者模式的区别

网上博客很多使用KFC套餐来做的例子,讲述地不够贴切,觉得容易误导读者,在那个例子中KFC的套餐(ConcretedBulider)的具体内容被消费者(Client)清楚地了解且也是其关心的点,但是在...
  • stephzcj
  • stephzcj
  • 2017年05月22日 16:05
  • 457

设计模式 —— 建造者

建造者模式通常用于复杂对象的创建,用户不需要关心对象的内部的具体构建细节,只需确定对象的类型就可以构建它们。 建造者模式将复杂对象的构建与对象的表现分离开来,这样使得同样的构建过程可以创建出不同的表现...
  • jthivan
  • jthivan
  • 2016年03月24日 16:37
  • 186
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式-建造者
举报原因:
原因补充:

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