设计模式—构建器模式(Builder Pattern)
来源:互联网 发布:淘宝大学入口 编辑:程序博客网 时间:2024/04/26 20:17
Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成。比如说现
在有一个类表学生应聘的基本信息。这些信息有一些信息是必须的,比如姓名,身份证号码等,而有许多是可选项,
比如民族、爱好等信息。学生的可选参数可能有20多个以上,这是一个非常的复杂的类了。传统的方法是采用重叠构
造器模式,在这种模式下,你提供第一个只有必要参数的构造器,第二个构造器只有一个可选项,第三个有两个可选
项,依此内推。最后一个构造器包含所有的参数。为了简单起见,接下来的举的例子我们有六个参数,其中,两个必
选参数(姓名、身份证号码),四个可选参数(电话、年龄、地址、邮箱)。
public class Student { private String name; private String id; private String telePhone; private int age; private String address; private String email; public Student(String name, String id) {this(name,id,null); } public Student(String name, String id, String telePhone) {this(name,id,telePhone,0); } public Student(String name, String id, String telePhone, int age) {this(name,id,telePhone,age,null); } public Student(String name, String id, String telePhone, int age, String address) {this(name,id,telePhone,age,address,null); } public Student(String name, String id, String telePhone, int age, String address, String email) {super();this.name = name;this.id = id;this.telePhone = telePhone;this.age = age;this.address = address;this.email = email; } }这种实现方式的缺点就是,现在有许多你不想设置的参数时,但是你还不得不去为他们传递值。不想设置的值我们可
以设置为0或者为null,这里面只有六个参数,看起来不是很糟糕,可是当参数愈来愈多时,复杂性是不可想象的。
重叠构造器模式在有许多参数的时候,客户端的代码非常难写,并且不易阅读。
还有一种方式就是JavaBeans模式。在这种模式下,调用一个无参构造器来创建对象,然后调用setter方法来设置每一个必要的参数,以及可选参数。
public class Student { private String name; private String id; private String telePhone; private int age; private String address; private String email; public Student() {super(); } public void setName(String name) { this.name = name; } public void setId(String id) { this.id = id; } public void setTelePhone(String telePhone) { this.telePhone = telePhone; } public void setAge(int age) { this.age = age; } public void setAddress(String address) { this.address = address; } public void setEmail(String email) { this.email = email; }}相比前面的解决方法,这种方法创建实例很容易,代码可读性较好。但是不足的是,这种方法在构造过程中JavaBeans可能处于不一致的状态。JavaBeans模式阻止了把类做成不可变类的可能。这就需要程序员付出额外的努力去保证它的线程安全。
接下来就是我们今天的主角登场了。欢迎Builder模式(哈哈)!
Builder模式的定义是用于构建复杂对象的一种模式,所构建的对象往往需要多步初始化或赋值才能完成。Builder模
式的要点就是通过一个代理来完成对象的构建过程。这个代理职责就是完成构建的各个步骤,同时它也是易扩展的。
public class Student { private String name; private String id; private String telePhone; private int age; private String address; private String email; public static class Builder {//必选项private String name;private String id;//可选项private String telePhone = null;;private int age = 0;private String address = null;private String email = null;public Builder(String name, String id) { super(); this.name = name; this.id = id;}public Builder getTelePhone(String telePhone){ this.telePhone=telePhone; return this;}public Builder getTAge(int age){ this.age=age; return this;}public Builder getAddress(String address){ this.address=address; return this;}public Builder getEmail(String email){ this.email=email; return this;}public Student build(){ return new Student(this);} } private Student(Builder b){telePhone=b.telePhone;age=b.age;address=b.address;email=b.email; }}
客户端调用:
Student stu=new Student.Builder("jiangfeng", "340823").getAddress("武大").getTAge(24).build();可见,客户端的代码便于编写,易于阅读。,与构造器相比,builder的优势在于,builder可以有多个可变参数。构造器像方法一样,只有一个可变参数。因为builder利用单独的方法来设置每个参数。还有,Builder模式十分灵活,可以利用当个Builder构建多个对象。builder的参数可以在创建对象期间进行调整,也可以随着不同的对象而改变。
0 0
- 设计模式—构建器模式(Builder Pattern)
- 浅谈 java 设计模式--构建模式(Builder pattern)
- 设计模式:构建器模式(Builder)
- 设计模式4 - 构建者模式Builder Design Pattern
- 思维盛宴之设计模式-构建者模式Builder Pattern
- 设计模式——生成器模式(Builder Pattern)
- 设计模式——构建器(Builder)模式
- 设计模式——构建者模式(Builder)
- 设计模式:创建型模式:建造模式(Builder Pattern)
- 设计模式——__构建者模式 Builder模式
- 设计模式——建造者模式【Builder Pattern】
- C#设计模式——生成器模式(Builder Pattern)
- java设计模式——建造者模式(Builder Pattern)
- Java设计模式——建造模式(Builder Pattern)
- 【设计模式】创建型模式——建造者模式(Builder Pattern)
- 设计模式 建造者模式(Builder Pattern)
- .NET设计模式-建造者模式(Builder Pattern)
- 设计模式5:Builder Pattern(建造者模式)
- Android的权限permission
- Openstack 快速入门(官方文档直译)
- weiphp微信支付开发教程
- 优秀博客收藏
- UI - UIPageControl
- 设计模式—构建器模式(Builder Pattern)
- CentOS7下Python开发环境搭建
- java web总结(数据库连接池)
- leetCode --Reverse Integer以及java基本类型
- [LeetCode]Permutations
- java中类的初始化和对象的实例化区别
- STL源码学习----lower_bound和upper_bound算法
- Handler原理
- unicode, utf-8, codepage的含义 以及 相互关系