设计模式——建造者模式 1
建造者模式(Builder)
什么是建造者模式?大部分网上的定义是:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示;是看完之后是不是一头雾水啊,我们可以和工厂模式进行比较一下,前面我们已经了解过了工厂模式,它是创建单个类的模式,而建筑者模式则是让各种产品集中管理,用来创建复合对象。复合对象就是指某个类具有不同的属性;
下面我们用一个例子进行讲解,比如一个User类,我们需要构建一大批用户,用户属性:username,password,mail,age,sex;
package cs_factory;
public class User {
private String username;
private String password;
private String mail;
private int age;
private String sex;
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
不同用户注册的时候可能全都填写了,而有一些就填了昵称和密码
所有需要构造方法了:
public User(String username, String password, String mail, int age, String sex) {
super();
this.username = username;
this.password = password;
this.mail = mail;
this.age = age;
this.sex = sex;
}
public User(String username, String password){
super();
this.username = username;
this.password = password;
}
其他不一一写了,方法大家都懂
而测试类就该这样,你就可以这样创建各个需要的对象
User user1 = new User("一只猫","123","123@qq.com",16,"女");
User user2 = new User("一条鱼","123",20,"男");
User user3 = new User("一只狗","123","456@qq.com");
User user4 = new User("一个人","123");
我们可以观察一下这样写是不是可读性很差,鬼知道里面的123是什么,16是什么。如果这样不明显,那么你再加两个属性:身高,体重;是不是更看不懂了。
private double height;
private double weight;
我们再想想看,就是当有很多参数时,编写这个构造函数就会显得异常麻烦,这时候如果换一个角度,试试Builder模式,你会发现代码的可读性一下子就上去了。我们这样干,把User的构造方法都不要,在里面这样写:
...
private User(Builder builder) {
this.username=builder.username;
this.password=builder.password;
this.mail=builder.mail;
this.age=builder.age;
this.sex=builder.sex;
}
static class Builder{
private String username;
private String password;
private String mail;
private int age;
private String sex;
public Builder username(String username){
this.username=username;
return this;
}
public Builder password(String password){
this.password=password;
return this;
}
public Builder mail(String mail){
this.mail=mail;
return this;
}
public Builder age(int age){
this.age=age;
return this;
}
public Builder sex(String sex){
this.sex=sex;
return this;
}
public User build(){
return new User(this);
}
}
...
那么我们就可以这样构造了:
User.Builder builder = new User.Builder();
User user = builder
.username("一只猫")
.password("123")
.mail("123@qq.com")
.age(18)
.sex("女")
.build();
四个字形容:“简单明了” 三个字形容:“真清楚” 两字:“漂亮” 一字:“酷”。
我就问你们是不是都知道我要填的什么属性。在Builder类中的成员函数返回Builder对象自身的另一个作用就是让它支持链式调用,使代码可读性大大增强。其实在java中有两个常见的类也是Builder模式,那就是StringBuilder和StringBuffer。
还有其他的各大框架中广泛应用建造者模式,比如网络请求的okhttp等等。
最后说下我们是怎么干成这样的:
1.首先要一个静态的内部类Builder,而且成员和外部类User一毛一样。
2.Builder类通过一系列的方法用于成员变量的赋值,并返回当前对象本身(this)
3.Builder类提供一个build方法或者create方法用于创建对应的外部类,该方法内部调用了外部类的一个私有构造函数,该构造函数的参数就是内部类Builder。
4.外部类提供一个私有构造函数供内部类调用,在该构造函数中完成成员变量的赋值,取值为Builder对象中对应的值
转载于:https://www.cnblogs.com/llw1996/p/7045174.html
设计模式——建造者模式 1相关推荐
- Python设计模式-建造者模式
Python设计模式-建造者模式 代码基于3.5.2,代码如下; #coding:utf-8 #建造者模式 class Burger():name = ""price = 0.0d ...
- 说说设计模式~建造者模式(Builder)
建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC ...
- 设计模式 建造者模式_设计模式:建造者
设计模式 建造者模式 有时需要在应用程序中创建一个复杂的对象. 一种解决方案是Factory模式,另一种是Builder设计模式. 在某些情况下,您甚至可以结合使用这两种模式. 但是在本文中,我想研究 ...
- 设计建造者模式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 变化是永恒的 又是一个周三,快要下班了,老大突然拉住我,喜滋滋地告诉我:"牛叉公司很满意我们做的模型,又签订了一个合同,把奔驰.宝马的车辆模型都交给我们公司制作了,不过这次又额外增 ...
- 大话设计模式—建造者模式
建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 一个 Builder 类会一步一步构造最 ...
- 我的Java设计模式-建造者模式
在未上大学之前,一直有个梦想"I have a dream!",就是能成为一位汽车工程师,一直幻想着开着自己设计的汽车飞奔在公路上,迷倒了万千少女.咳咳~~虽然现在没实现我的dre ...
- Java常用设计模式————建造者模式
引言 建造者模式(Builder Pattern)使用多个简单对象一步一步构建成一个复杂的对象.这种类型的设计模式属于建造型模式,它提供了一种创建对象的最佳方式. 一个Builder会一步步构建最终的 ...
最新文章
- Android 模仿微信启动动画(转)
- 分享一下收到的微软CRM云分享计划 邮件
- 无需部署即可测试JPQL / HQL
- java中 queryparam_java – 何时使用@QueryParam和@PathParam
- Linux同步目录 保留文件修改时间和权限 rsync
- oracle sql 基础(六):数据控制语言(用户及权限管理)
- 转:华 为 路 由 常 用 命 令
- Appium 解决微信公众号、小程序切换 webview 后无法定位元素的问题
- Toad for Oracle Authorization key
- SQLite:关于日期的字段的优化将给Julia带来大幅效率提升
- 地图坐标拾取【获取指定地点经纬度】
- CATIA V6二次开发——宏应用
- Altium Designer 20查找指定元器件
- 阿里短信单发,批量发送
- eNSP下园区网综合实验分步配置(1)Eth-Trunk、Vlan、Trunk
- python输入名字配对情侣网名_输入名字自动取情侣网名,输入名字自动取网名
- ppm调制matlab程序,求助:谁能帮我编写一个4ppm的解调程序 谢谢了
- 我为啥叫这个名字,莫名其妙的油葫芦
- 中国超级计算行业发展动态及投资战略研究报告(2022-2027年版)
- CentOS6怎样开启MySQL远程访问
热门文章
- php图片存储内容读取,php读取和保存base64编码的图片内容
- 小肽相关1~peptidomic discovery of short open reading frame–encoded peptides in human cells
- 蒙特卡洛树搜索_蒙特卡洛树搜索与Model-free DRL
- 基于隐马尔可夫模型的有监督词性标注
- 图像融合(一)--概述
- python如何创建工程预设_如何在sublime3项目设置中设置python模块的搜索路径?ImportError: No module named *的解决办法...
- Markdown语法(一)标题段落分割线
- “21天好习惯”第一期-15
- php下载功能,js php实现无刷新下载功能
- dateformat java 并发_SimpleDateFormat并发隐患及其解决