尊重他人的劳动成果,转载请标明出处: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技术问题,有兴趣的可以加下,大家一起进步。

小话设计模式:Builder模式相关推荐

  1. 小话设计模式(番外二)委托模式

    委托(Delegate)模式定义了对象之间的一对一的关系,被委托方可以作为委托方的事件接收者或者数据源(Data Source),当它作为事件接受者的时候,可以认为它是一种特殊的观察者(参考小话设计模 ...

  2. 小话设计模式(十)外观模式

    外观(Fascade)模式定义一个高级的接口,将子系统里的一组接口整合起来,提供了一个统一的外观. 在以下情况下可以考虑使用外观模式: (1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观 ...

  3. C#软件设计——小话设计模式原则之:依赖倒置原则DIP

    前言:很久之前就想动笔总结下关于软件设计的一些原则,或者说是设计模式的一些原则,奈何被各种bootstrap组件所吸引,一直抽不开身.群里面有朋友问博主是否改行做前端了,呵呵,其实博主是想做" ...

  4. 设计模式-Builder模式

    目录 一个例子(做汤) 人工做汤 机器做汤(使用Builder模式) 优缺点 优点 缺点 Builder模式属于创建型模式. 它是将一个复杂对象的构建过程隐藏起来,让使用者只关系自己要生成什么样的对象 ...

  5. C#软件设计——小话设计模式原则之:接口隔离原则ISP

    前言:有朋友问我,设计模式原则这些东西在园子里都讨论烂了,一搜一大把的资料,还花这么大力气去整这个干嘛.博主不得不承认,园子里确实很多这方面的文章,并且不乏出色的博文.博主的想法是,既然要完善知识体系 ...

  6. 设计模式--builder 模式

    设计模式–builder 模式 说明 @author JellyfishMIX - github / blog.jellyfishmix.com LICENSE GPL-2.0 本文默认已经知道了 b ...

  7. Java设计模式——Builder模式

    前言 之前写Android程序的时候,经常会用到Dialog(对话框)这个控件.我们在使用Dialog,比如AlertDialog的时候就用到了这里要说明的Builder模式.现在我们来看一下这样的一 ...

  8. 设计模式 —— Builder 模式

    文章目录 1 Builder 模式的核心思想 2 第一种 Builder 模式 3 第一种模式的困惑 4 第二种 Builder 模式 5 第二种 Builder 模式见解 6 参考 1 Builde ...

  9. Java 常用设计模式 -- Builder模式

    Builder模式是在Java中最流行的模式之一.它很简单,有助于保持对象不可变,并且可以使用Project Lombok的@Builder或Immutables等工具生成,仅举几例. 模式的流畅变体 ...

最新文章

  1. 没有与参数列表匹配的 重载函数 getline 实例_面试题:方法重载的底层原理?...
  2. 第一天   Linux基本操作
  3. BEA Workshop Studio有什么用?
  4. 参考滴滴左右对齐自适应
  5. 小程序中textarea层级最高的结局办法
  6. 设备树的引入及简明教程
  7. 饮冰三年-人工智能-Python-29瀑布流
  8. python多列排序
  9. leetcode41 --- firstMissingPositive
  10. this.get_element .style为空或不是对象
  11. linux设置服务开机自启动
  12. Vue简易购物车实例
  13. 夜谈TCP/IP的起源和胜利
  14. 什么是Trunk端口模式?此模式有何作用?
  15. Angular--*ngFor
  16. Android安卓-UI自动打卡Appium+PO+Pytest(1)
  17. 省公司交流期间一线工作总结
  18. NEW RDSP MODE I
  19. 致Emacs初学者+Emacs初学者必知必会
  20. Grubbs检验离群值——循环算法求出多个离群值

热门文章

  1. 笔试题-2023-禾赛-FPGA【纯净题目版】
  2. 【JAVA秘籍功法篇-SpringBoot】SpringBoot如何集成Redis?
  3. QFile.readall();最多读取1G
  4. 金属质感不锈钢按钮Button
  5. 谷歌搜索语法(二)高级语法
  6. Https数字证书交换过程介绍
  7. 杭电多校2020 第十场 C - Mine Sweeper HDU - 6879
  8. 女生学中山大学计算机专业就业前景,CCTV.com
  9. JavaScript 逗号运算符
  10. XP win7双系统安装及激活