生成器模式 也称 构建模式,是一种比较常用的模式。 比如 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); } }
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(); } }