建造者模式

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

小洪的故事

今日出演:小洪、强哥

这一天刚放学,小洪已经饿到感觉自己已经饿到如鸿毛一样轻,快飘起来了(实际上小洪比泰山还重)。这时候强哥从身后走来,拍了拍小洪的肩膀:“老弟,听说学校门口新开了一家韩国自助烤肉,走!哥请你去吃。”

小洪眼珠子一转:“天下没有免费的午餐啊,老哥你就直说我干嘛吧。”

“哎,你想多了,我只是想今天去试试好不好吃,明天带女朋友去好点菜!”说罢强哥就搂着小洪的肩膀向门外走去,留下小洪的满脸黑线。

自助餐中的建造者

“老板,再来一盘羊肉。“小洪耳朵里听见强哥吆喝着,眼睛却离不开烤炉上滋滋冒油的肉片:“强哥,我等不及了,可以开动了吗?”

“别急别急。烤肉切忌心急”,强哥说:“我们要构建好这一块肉,这样更好吃!你看看这一块肉。”

肉类

public class Meet {// 油String oil;// 调料1,2,3String condiment1;String condiment2;String condiment3;// 肉的类型String MeetType;// 肉的成熟度int degree;@Overridepublic String toString() {return "一块" +"油是'" + oil + '\'' +", 调料1为'" + condiment1 + '\'' +", 调料2为'" + condiment2 + '\'' +", 调料3为'" + condiment3 + '\'' +", " + degree + "分熟的" +MeetType;}// 构造方法私有化,防止客户端直接调用构造方法private Meet(String oil, String condiment1, String condiment2, String condiment3, String meetType, int degree) {this.oil = oil;this.condiment1 = condiment1;this.condiment2 = condiment2;this.condiment3 = condiment3;MeetType = meetType;this.degree = degree;}
}

“强哥,全天下的肉不都是这样的么,不赶快吃饿死了。”小洪感到不解。

“别急,今天这个肉中,还有一个建造者内部类,负责建造这一块肉。”

建造者内部类

// 在Meet类中的静态方法,调用生成肉类
public static MeetBuilder builder(){return new MeetBuilder();
}
//
public static class MeetBuilder{String oil;String condiment1;String condiment2;String condiment3;String MeetType;int degree;public MeetBuilder oil(String oil){this.oil = oil;return this;}public MeetBuilder condiment1(String condiment1){this.condiment1 = condiment1;return this;}public MeetBuilder condiment2(String condiment2){this.condiment2 = condiment2;return this;}public MeetBuilder condiment3(String condiment3){this.condiment3 = condiment3;return this;}public MeetBuilder MeetType(String meetType){this.MeetType = meetType;return this;}public MeetBuilder degree(int degree){this.degree = degree;return this;}public Meet build(){return new Meet(oil, condiment1, condiment2, condiment3, MeetType, degree);}
}

强哥给小洪讲述了构建者类之后,趁着小洪还在懵逼中,马上叫到:“老板,你们这的招牌有什么?”

老板闻声赶来,并介绍到:”我们这里的黑椒胡椒牛排不错,客官你们想要几成熟的啊?“

“七成熟吧。”

“好嘞!”老板马上在我们面前动手做了起来。

客户端调用

public class People {public static void main(String[] args) {Meet meet = Meet.builder().oil("植物油").MeetType("牛肉").condiment1("香菜").condiment2("胡椒粉").condiment3("黑椒酱").degree(7).build();System.out.println(meet);}
}

“你瞧,这个招牌合不合你胃口呀?”强哥笑着问小洪。

“可,太可了!”小洪看着手法熟练的老板,哦不是老板手中的肉,说。

运行结果

一块油是'植物油', 调料1为'香菜', 调料2为'胡椒粉', 调料3为'黑椒酱', 7分熟的牛肉

“哇,真的太好吃了!”小洪满意地擦擦嘴,“这个建造器也太好用了吧!省去了很多功夫。”

“其实我们也可以不用建造器,直接手动建造这么一块肉呢!”强哥跃跃欲试。

“怎么做?”小洪用求知和崇拜的目光看着强哥。

“只需要将 Meet 的 set 方法都加上 return this 就可以啦!”强哥说,“接着就像下面一样调用。许多人都是这么用的,只不过还是推荐用建造者方法,毕竟老板比我们都熟练一些。”

Meet meet = new Meet().oil("").MeetType("").condiment1("").condiment2("").condiment3("").degree(10);
System.out.println(meet);

“可能我比较重口味,我想自己做一块芝士、酱油、芥末、六分熟的鸡排,老弟你不要介意。”

“强哥怎么这么说,咱们就不用客气,我就自己做一块用牛油、调料用番茄酱、沙拉酱和大蒜的五分熟羊排好了。”小洪说着自己准备动手。

“五分熟羊排和大蒜,英雄所见略同啊!”有道是酒逢知己千杯少,一顿羊排少不了。

男生的快乐往往就是这么简单、朴实无华。强哥的女朋友可就未必能体会到了。


欢迎关注我的公众号,mybatis底层原理、设计模式、java数据结构、redis等知识分享,欢迎一起讨论。

常用设计模式 - 建造者模式相关推荐

  1. Java常用设计模式————建造者模式

    引言 建造者模式(Builder Pattern)使用多个简单对象一步一步构建成一个复杂的对象.这种类型的设计模式属于建造型模式,它提供了一种创建对象的最佳方式. 一个Builder会一步步构建最终的 ...

  2. Python设计模式-建造者模式

    Python设计模式-建造者模式 代码基于3.5.2,代码如下; #coding:utf-8 #建造者模式 class Burger():name = ""price = 0.0d ...

  3. 说说设计模式~建造者模式(Builder)

    建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC ...

  4. 设计模式 建造者模式_设计模式:建造者

    设计模式 建造者模式 有时需要在应用程序中创建一个复杂的对象. 一种解决方案是Factory模式,另一种是Builder设计模式. 在某些情况下,您甚至可以结合使用这两种模式. 但是在本文中,我想研究 ...

  5. Java常用设计模式————原型模式(一)

    介绍 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式用于创建重复的对象,同时又能保证性能.当直接创建对象的代价比较大时,则采用 ...

  6. JAVA设计模式--建造者模式

    目录 前言 一.什么是建造者模式 二.建造者模式的结构 三.建造者模式应用场景 参考文章 前言 在听完厉风行老师<设计模式系列课程>中的建造者模式一节后顿时感觉有点头大,感觉它有点像工厂方 ...

  7. 设计建造者模式java代码,Java设计模式-建造者模式

    定义 Separate the construction of a complex object from its representation so that the sameconstructio ...

  8. python创造者_python 设计模式-建造者模式

    问题:在上一篇python设计模式:抽象工厂模式中,我们尝试用抽象工厂模式规范化了 Pizza 原材料的供应以及 Pizza 的创建.但是我们忽略了一个问题,那就是每种 Pizza 的烘焙时间依赖于生 ...

  9. java设计模式-建造者模式

    概念:使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. ...

  10. 设计模式-建造者模式(转自:http://www.cnblogs.com/cbf4life/archive/2010/01/14/1647710.html)...

    11.1 变化是永恒的 又是一个周三,快要下班了,老大突然拉住我,喜滋滋地告诉我:"牛叉公司很满意我们做的模型,又签订了一个合同,把奔驰.宝马的车辆模型都交给我们公司制作了,不过这次又额外增 ...

最新文章

  1. pandas使用bdate_range函数获取起始时间(start)和结束时间(end)范围内的所有工作日日期(business day)
  2. 运维企业专题(9)RHCS集群工具介绍
  3. python中读取word信息_Python实现批量读取word中表格信息的方法
  4. python管理系统项目首选公司_Python 项目的部署,目前互联网公司有哪些成熟的方案?...
  5. 反思本地测试没有问题 但测试服务器存在问题的解决方法:1.文件夹2.分支切换
  6. Redis客户端命令行redis-cli操作
  7. php做通讯录界面,PHP 制作通讯录(三)
  8. 【matlab】直方图(hist函数的应用)
  9. 如何使用cmd进入打印机选项_用命令添加打印机
  10. TIA博途中通过PN耦合器实现不同网段的PLC进行PROFINET通信的具体方法
  11. 第2次作业—— 时事点评
  12. kali通过msf利用永恒之蓝攻击服务器
  13. 计算机文化考试论文,计算机文化基础论文
  14. 2016年安徽省程序设计竞赛 水题C,D,E 题解
  15. Java 实现PDB数据库中蛋白质部分序列与Uniport数据库中相应的全长序列的最优匹配
  16. 个人Linux学习笔记操作大全
  17. 谷歌Chrome浏览器点击任务栏图标没有最小化
  18. HTML内嵌pdf在ios设备上无法正常显示
  19. gmai邮箱怎么注册啊
  20. RGB 565格式的256色颜色表代码表

热门文章

  1. 【深度学习】CNN+Transformer汇总
  2. MNE预处理脑电数据
  3. java json的使用_java JSON的使用和解析
  4. matlab解决相遇追及问题,生活中用到的数学例子
  5. 温湿度传感器—HDC1080
  6. 大点符号pt 1初学者指南
  7. java普通分隔符,懂得java的文件4种分隔符
  8. 减肥中,做个 体重三围 测量软件
  9. 02 必备SQL和表关系及授权
  10. Kube-OVN:大型银行技术团队推荐的金融级云原生网络方案