小话设计模式:Builder模式

尊重他人的劳动成果,转载请标明出处:http://blog.csdn.net/gengqiquan/article/details/52764455, 本文出自:【gengqiquan的博客】

有一天,一个屌丝程序员捡到了一盏神灯,恩,我擦了个擦,冒出了个灯神。灯神:我可以满足你一个愿望,说吧,你要啥子?
屌丝程序员立马:我艹,碉堡了!
然后就听蹦的一声,灯神说:你的愿望完成了!就剩下屌丝程序员捂着裆部在那里抽搐。

嘛!开玩笑的,作为一个屌丝程序员,最缺什么?玩笑!当然是妹子啊。
灯神,先来一打妹子,啥?一打给不了?那 就给一个吧,恩,要一米六以上,36D,圆脸,披肩长发,细腰瘦腿,微微一笑很倾城的那种。

于是,灯神拿出一坨泥,东捏一下西捏一下,稍稍一会儿,一个完美符合屌丝程序员的妹子就出现在了他面前。

        Girl girl=new Girl();
        girl.setChestSize(36D);
        girl.setHeight(170);
        girl.setFace(RoundFace);
        girl.setHair(Shawl);
        girl.Waistleg(true);
        girl.SmileToDiaoSi();

恩,一切都是那么的完美,这个屌丝程序员就带着他心目中的完美妹子回家撸代码了。

然后灯神就又回到了神灯里飘啊飘的,直到又有一天,又有一个屌丝程序员一脚踢到了神灯,灯神又冒出来了:我可以满足你一个愿望,说吧,你要啥子?

屌丝程序员:我艹,碉。。。。,咳咳,我要一个妹子(为啥又要妹子?玩笑!屌丝不要妹子还会是屌丝?),瓜子脸,身高,恩,一米七左右,太高了hold不住,短发,34C Cup就可以了,重点是气质,一定要冷艳高贵。

于是,灯神又拿出了一坨泥,东捏一下西捏一下,稍稍一会儿,又一个完美符合屌丝程序员的妹子就出现在了他面前。

        Girl girl=new Girl();
        girl.setChestSize(34C);
        girl.setHeight(160);
        girl.setFace(RoundFace);
        girl.setHair(Short);
        girl.DespiseToDiaoSi();

恩,一切还是那么的完美,这个屌丝程序员就带着他一脸鄙视他的冷艳妹子回家撸代码了。

然后灯神再次回到了神灯里飘啊飘的,直到又有一天,又有一个屌丝程序员一脚踢到了神灯,灯神又冒出来了:我可以满足你一个愿望,说吧,你要啥子?

屌丝程序员:我要一个妹子!巴拉巴拉吧一大堆要求。

灯神一看这架势,感情这年代的人都只要妹子啊,灯神直接掏出一坨泥,扔给屌丝程序员:你自己捏吧,喜欢啥样的捏啥样的。

程序员一脸懵逼:我艹,我不会捏啊。

oh my god!灯神头疼了,但灯神也懒啊,不想每次有人问他要妹子都按要求捏一个,多累啊,于是灯神就捏了一个机器人,由他负者捏人,机器人嘛,不懂变通,只能按固定的流程来。所以女人可能有的特性它都得去判断有没有需要,有就捏上去,没有就拉倒。这个机器人就是个Builder。屌丝向灯神提要求的过程就是配置参数,完了要求提完了就告诉机器人:你可以按我的要求捏了。这个过程就是builder();,由他来生成一个理想的girl对象。

额,首先,灯神得告诉机器人一个girl有哪些特性。

public class Girl {
    int ChestSize;
    int Height;
    int weight;
    String Face;
    String Hair;
    String Body;
    void SmileToDiaoSi(){}
    void DespiseToDiaoSi(){}
    public static  class GirlBuilder{

    }
}

然后就给机器人设置程序了,由于要求是一个一个提出的,而生成girl是最后完成的,机器人必须存储下来这些要求,所以机器人得有与之对应的属性,

  public static  class GirlBuilder{
        int ChestSize;
        int Height;
        int weight;
        String Face;
        String Hair;
    }
 public static  class GirlBuilder{
        private   int ChestSize;
        private  int Height;
        private  int weight;
        private  String Face;
        private  String Hair;
        private boolean Waistleg;
       public GirlBuilder setWaistleg(boolean waistleg) {
             Waistleg = waistleg;
             return this;
        }

        public GirlBuilder setChestSize(int chestSize) {
            ChestSize = chestSize;
            return this;
        }

        public GirlBuilder setHeight(int height) {
            Height = height;
            return this;
        }

        public GirlBuilder setWeight(int weight) {
            this.weight = weight;
            return this;
        }

        public GirlBuilder setFace(String face) {
            Face = face;
            return this;
        }

        public GirlBuilder setHair(String hair) {
            Hair = hair;
            return this;
        }
    }

为了代码每个提要求的方法都返回自身,便于链式调用,这也是我喜欢这个模式的原因。

当屌丝程序员提完要求后机器人就可以开始捏了,我们看机器人捏girl的方法

public Girl builder() {
            Girl girl = new Girl();
            if (this.ChestSize > 0) {
                girl.ChestSize = this.ChestSize;
            } else {
                girl.ChestSize = 36;
            }
            girl.Face = this.Face;
            if (this.Height > 0) {
                girl.Height = this.Height;
            } else {
                girl.Height = 165;
            }
            if (this.weight > 0) {
                girl.weight = this.weight;
            } else {
                girl.weight = 100;
            }
            if(this.Hair!=null&&!this.Hair.equals("")){
                girl.Hair=this.Hair;
            }
            else{
                girl.Hair="Shawl";
            }
            if (Waistleg) {
                girl.Body = "Waistleg";
            }else {
                girl.Body = "Slim";
            }
            return girl;
        }

这样以后再碰到屌丝程序员要妹子,灯神直接掏出机器人扔他脸上就ok了

 Girl.GirlBuilder builder = new Girl.GirlBuilder();
        builder.setChestSize(34)
                .setWaistleg(true)
                .setWeight(100)
                .setFace("大饼脸")
                .setHair("短发");
        Girl girl = builder.builder();

好了,灯神可以愉快地继续流浪了。

说下builder模式的特性吧,这个模式比较适合一些构建过程复杂的对象(比如参数特别多,而且很多参数具有默认值的时候)。他允许用户在不知道内部构建细节的情况下精确的控制对象的构造流程。可以很好的降低构建过程与对象属性之间的耦合。

我建了一个QQ群(群号:121606151),用于大家讨论交流Android技术问题,有兴趣的可以加下,大家一起进步。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值