设计模式之生成器模式

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

}


相信通过这个例子 大家对 生成器模式和 链式编程有一定的了解。(生成器模式是一种设计模式,链式编程是编码的一种规范 两者不一定一起出现)






你可能感兴趣的:(设计模式之生成器模式)