生成器模式(Builder)

@@@模式定义:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。


@@@练习示例: 
继续工厂方法模式中的导出数据的应用框架。


@@@示例代码:
\export\ExportHeaderModel.java

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package export;

/**
 * 描述输出到文件头的内容的类
 */
public class ExportHeaderModel {
    /**
     * 分公司或门市点编号
     */
	private String depId;
	
	/**
	 * 导出数据的日期
	 */
	private String exportDate;

	public String getDepId() {
		return depId;
	}

	public void setDepId(String depId) {
		this.depId = depId;
	}

	public String getExportDate() {
		return exportDate;
	}

	public void setExportDate(String exportDate) {
		this.exportDate = exportDate;
	}
}

\export\ExportDataModel.java

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package export;

/**
 * 描述输出数据的类
 */
public class ExportDataModel {
    /**
     * 产品编号
     */
	private String productId;
	
	/**
	 * 销售价格
	 */
	private double price;
	
	/**
	 * 销售数量
	 */
	private double amount;

	public String getProductId() {
		return productId;
	}

	public void setProductId(String productId) {
		this.productId = productId;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	public double getAmount() {
		return amount;
	}

	public void setAmount(double amount) {
		this.amount = amount;
	}
}

\export\ExportFooterModel.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package export;

/**
 * 描述输出到文件尾的内容的类
 */
public class ExportFooterModel {
    /**
     * 输出人
     */
	private String exportUser;

	public String getExportUser() {
		return exportUser;
	}

	public void setExportUser(String exportUser) {
		this.exportUser = exportUser;
	}
}

\export\ExportToTxt.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package export;

import java.util.Collection;
import java.util.Map;

/**
 * 导出数据到文本文件的类
 */
public class ExportToTxt {
    /**
     * 导出数据到文本文件
     * @param ehm 文件头的内容
     * @param mapData 数据的内容
     * @param efm 文件尾的内容
     */
	public void export(ExportHeaderModel ehm,
			           Map<String, Collection<ExportDataModel>> mapData,
			           ExportFooterModel efm) {
		// 用来记录最终输出的文件内容
		StringBuffer buffer = new StringBuffer();
		// 1: 先来拼接文件头的内容
	    buffer.append(ehm.getDepId() + ", " + ehm.getExportDate() + "\n");
	    // 2: 接着来拼接文件体的内容
	    for (String tblName : mapData.keySet()) {
	    	// 先拼接表名称
	    	buffer.append(tblName + "\n");
	    	// 然后循环拼接具体数据
	    	for (ExportDataModel edm : mapData.get(tblName)) {
	    		buffer.append(edm.getProductId() + ", " + 
	    				edm.getPrice() + ", " + edm.getAmount() + "\n");
	    	}
	    }
	    // 3: 最后来拼接文件尾的内容
	    buffer.append(efm.getExportUser());
	    
	    // 为了演示的简洁性,省略写输出文件的代码
	    // 把要输出的内容输出到控制台看看
	    System.out.println("
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值