生成器模式 也称 构建模式,是一种比较常用的模式。 比如 Android 中大家熟悉的AlertDialog 就是使用的构建器模式。比如 咱们投简历就会知道 导出 会有格式的选择,如 html ,word格式 这个也可以用到生成器模式 使得编码更加的规范。
生成器定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
构建器模式的优点:同样的过程 可以获得不同的结果。构建过程可以复用。获取具体的结果可以灵活的切换,总结来说就是 松散耦合,代码复用
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle("温馨提示").setMessage("你打开了一个对话框").setIcon(R.drawable.ic_launcher);
- builder.show();
如上述代码 通过 AlertDialog.Builder 在show 或者 create的时候 都会返回一个AlertDialog对象。
下面通过一个小例子结合我们的模式和链式编程 让我们对构建模式更加了解
下面我们就构造一个人的对象 并且 可以进行一些操作
- package com.ww.build;
-
- public class Person {
-
-
- private String name;
-
-
- private String height;
-
-
- private String sex;
-
-
- private String weight;
-
-
- private String cardId;
-
- public Person(String name, String height, String sex, String weight, String cardId) {
- super();
- this.name = name;
- this.height = height;
- this.sex = sex;
- this.weight = weight;
- this.cardId = cardId;
- }
-
- public void show() {
- System.out.println("姓名:"+name+" 性别:"+sex+" 身高:"+height+" 体重:"+weight+ " 身份证号码:"+cardId);
- }
-
- }
有了个person对象 那就下面就是它的构建器
- package com.ww.build;
-
- public class ConcreteBuilder {
-
- private String name;
- private String height;
- private String sex;
- private String weight;
- private String cardId;
-
- public ConcreteBuilder(){
- }
-
- public ConcreteBuilder(String name, String height, String sex, String weight, String cardId) {
- super();
- this.name = name;
- this.height = height;
- this.sex = sex;
- this.weight = weight;
- this.cardId = cardId;
- }
-
- public Person build() {
- return new Person(name, height, sex, weight, cardId);
- }
-
- public ConcreteBuilder setName(String name) {
- this.name = name;
- return this;
- }
-
- public ConcreteBuilder setHeight(String height) {
- this.height = height;
- return this;
- }
-
- public ConcreteBuilder setSex(String sex) {
- this.sex = sex;
- return this;
- }
-
- public ConcreteBuilder setWeight(String weight) {
- this.weight = weight;
- return this;
- }
- public ConcreteBuilder setCardId(String cardId) {
- this.cardId = cardId;
- return this;
- }
-
- }
下面就是测试代码
- package com.ww.build;
-
- public class Test {
-
- public static void main(String[] args) {
- ConcreteBuilder builder = new ConcreteBuilder();
- builder.setName("张三").setSex("男").setHeight("167cm");
- builder.setWeight("65kg").setCardId("430181199505065525");
- Person person = builder.build();
- person.show();
- }
-
- }
相信通过这个例子 大家对 生成器模式和 链式编程有一定的了解。(生成器模式是一种设计模式,链式编程是编码的一种规范 两者不一定一起出现)