创建对象之Builder模式
2015-02-01 13:50
316 查看
/* * 创建对象的Builder模式 * Builder模式只适合创建对象时需要指定多个可选参数的场景. * 客户端: * 1:在客户端可以通过下面代码获取Person对象 * Person.PersonBuilder builder=new Person.PersonBuilder("111","王大少","男"); * 这里以选择可选参数年龄爱好为例子演示; * Person person=builder.setAge(22).setHobby("reading").build(); */ public class Person { /* * 必要的参数 * 身份证号、姓名、性别 * 声明为private避免外部不安全的修改 */ private String id; private String name; private String sex; /* * 可选参数 * 年龄、电话、爱好、住址、学历; */ private int age; private String phone; private String hobby; private String addr; private String major; /* * Person类私有的构造函数,为什么要用私有的构造函数? */ private Person(PersonBuilder builder) { this.id=builder.id; this.name=builder.name; this.sex=builder.sex; this.age=builder.age; this.phone=builder.phone; this.hobby=builder.hobby; this.addr=builder.addr; this.major=builder.major; } /* * 调用setter,getter方法获取更改私有成员 */ public void setId(String id) { this.id=id; } public String getId() { return id; } /* * 这个PersonBuilder是专门用于创建Person对象的, * 所以PersonBuilder类从属于Person类. 因此使用 * 内部类可以清晰的表述这种从属关系.使用"静态" * 内部类则是为了在不存在Person对象时创建PersonBuilder对象 */ public static class PersonBuilder{ /* * 必要的参数 * 身份证号、姓名、性别 */ private String id; private String name; private String sex; /* * 可选参数 * 年龄、电话、爱好、住址、学历; */ private int age; private String phone; private String hobby; private String addr; private String major; /* * 让客户端通过利用所有必要的参数调用构造函数得到一个builder对象 */ public PersonBuilder(String id,String name,String sex) { this.id=id; this.name=name; this.sex=sex; } /* * 调用无参的build方法创建Person对象 * 注意,在build方法调用前Person对象都没有被创建, 所以无需担心提前泄露的问题 */ public Person build() { return new Person(this); } /* * 调用类似于setter的方法来设置每个相关的可选参数 * 这里返回的是PersonBuilder对象,便于用级联的方式 * 设置可选参数,这样层次清晰,代码简洁 */ public PersonBuilder setAge(int age) { this.age = age; return this; } public PersonBuilder setPhone(String phone) { this.phone = phone; return this; } public PersonBuilder setHobby(String hobby) { this.hobby = hobby; return this; } public PersonBuilder setAddr(String addr) { this.addr = addr; return this; } public PersonBuilder setMajor(String major) { this.major = major; return this; } } }
相关文章推荐
- Objective-C设计模式——生成器Builder(对象创建)
- 建造者模式-Builder Pattern 复杂对象的组装与创建——建造者模式(三):关于Director的进一步讨论,建造者模式总结
- C++设计模式 之 “对象创建”模式:Factory Method、Abstract Factory、Prototype、Builder
- 《Effective Java》builder模式创建对象
- Java创建对象(重叠构造器模式,javaBean模式,Builder模式)
- 设计模式——创建型之使用建造者模式(Builder Pattern)灵活自由创建你的对象(一)
- 设计技巧20:建造模式:Builder 分不同的步骤创建复杂的对象,支持可变参数
- 建造者模式-Builder Pattern 复杂对象的组装与创建——建造者模式(二):游戏角色设计的建造者模式解决方案
- 设计模式深入浅出(二)对象创建——Builder,原型,单例
- 优雅地创建复杂对象 —— Builder 模式
- 创建模式(Builder Pattern、构建模式、生成器,对象创建型模式)
- 创建模式(Builder Pattern、构建模式、生成器,对象创建型模式)
- 2. 【创建和销毁对象】用构建器创建复杂参数对象(Builder模式)
- javascript 对象创建模式 之 builder
- Builder模式创建对象
- Builder模式的误区:将复杂对象的构建进行封装,就是Builder模式了吗?
- Builder 解析 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
- 创建模式:Builder模式
- (转)Builder模式的误区:将复杂对象的构建进行封装,就是Builder模式了吗?
- (转)Builder模式的误区:将复杂对象的构建进行封装,就是Builder模式了吗?