常用设计模式 - 建造者模式
建造者模式
建造者模式(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等知识分享,欢迎一起讨论。
常用设计模式 - 建造者模式相关推荐
- Java常用设计模式————建造者模式
引言 建造者模式(Builder Pattern)使用多个简单对象一步一步构建成一个复杂的对象.这种类型的设计模式属于建造型模式,它提供了一种创建对象的最佳方式. 一个Builder会一步步构建最终的 ...
- Python设计模式-建造者模式
Python设计模式-建造者模式 代码基于3.5.2,代码如下; #coding:utf-8 #建造者模式 class Burger():name = ""price = 0.0d ...
- 说说设计模式~建造者模式(Builder)
建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC ...
- 设计模式 建造者模式_设计模式:建造者
设计模式 建造者模式 有时需要在应用程序中创建一个复杂的对象. 一种解决方案是Factory模式,另一种是Builder设计模式. 在某些情况下,您甚至可以结合使用这两种模式. 但是在本文中,我想研究 ...
- Java常用设计模式————原型模式(一)
介绍 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式用于创建重复的对象,同时又能保证性能.当直接创建对象的代价比较大时,则采用 ...
- JAVA设计模式--建造者模式
目录 前言 一.什么是建造者模式 二.建造者模式的结构 三.建造者模式应用场景 参考文章 前言 在听完厉风行老师<设计模式系列课程>中的建造者模式一节后顿时感觉有点头大,感觉它有点像工厂方 ...
- 设计建造者模式java代码,Java设计模式-建造者模式
定义 Separate the construction of a complex object from its representation so that the sameconstructio ...
- python创造者_python 设计模式-建造者模式
问题:在上一篇python设计模式:抽象工厂模式中,我们尝试用抽象工厂模式规范化了 Pizza 原材料的供应以及 Pizza 的创建.但是我们忽略了一个问题,那就是每种 Pizza 的烘焙时间依赖于生 ...
- java设计模式-建造者模式
概念:使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. ...
- 设计模式-建造者模式(转自:http://www.cnblogs.com/cbf4life/archive/2010/01/14/1647710.html)...
11.1 变化是永恒的 又是一个周三,快要下班了,老大突然拉住我,喜滋滋地告诉我:"牛叉公司很满意我们做的模型,又签订了一个合同,把奔驰.宝马的车辆模型都交给我们公司制作了,不过这次又额外增 ...
最新文章
- pandas使用bdate_range函数获取起始时间(start)和结束时间(end)范围内的所有工作日日期(business day)
- 运维企业专题(9)RHCS集群工具介绍
- python中读取word信息_Python实现批量读取word中表格信息的方法
- python管理系统项目首选公司_Python 项目的部署,目前互联网公司有哪些成熟的方案?...
- 反思本地测试没有问题 但测试服务器存在问题的解决方法:1.文件夹2.分支切换
- Redis客户端命令行redis-cli操作
- php做通讯录界面,PHP 制作通讯录(三)
- 【matlab】直方图(hist函数的应用)
- 如何使用cmd进入打印机选项_用命令添加打印机
- TIA博途中通过PN耦合器实现不同网段的PLC进行PROFINET通信的具体方法
- 第2次作业—— 时事点评
- kali通过msf利用永恒之蓝攻击服务器
- 计算机文化考试论文,计算机文化基础论文
- 2016年安徽省程序设计竞赛 水题C,D,E 题解
- Java 实现PDB数据库中蛋白质部分序列与Uniport数据库中相应的全长序列的最优匹配
- 个人Linux学习笔记操作大全
- 谷歌Chrome浏览器点击任务栏图标没有最小化
- HTML内嵌pdf在ios设备上无法正常显示
- gmai邮箱怎么注册啊
- RGB 565格式的256色颜色表代码表