设计模式应用 生成器模式
来源:互联网 发布:淘宝想开情趣用品店 编辑:程序博客网 时间:2024/06/07 19:17
设计模式应用 生成器模式
看完了生成器模式, 决定改造之前的项目代码, 用生成器模式更妥当一些.
实战
场景: Web项目, 需求是将页面查询出的列表导出至excel, 页面有两个,分别是Order订单页面及Bill发票列表页, 两个页面的字段即excel的表头有所区别, 通过这两天学习设计模式, 重构了以前的代码.
应用生成器模式
因为导出excel这个动作, 在两个页面都一样, 只是导出的内容,表头啊,字段属性名有所区别, 还有个别字段的算法有所不同, 提到算法.
重构步骤
1.设计图
生成器接口:
/** * <p><b>类描述:</b> * 生成器 (在这里就是个工厂模式的产品, 其实现就是具体的产品实现) * </p> * <p><b>使用方式:</b> </p> * <p><b>创建时间:</b>2017年9月3日</p> * @author mengqa */public interface ExcelBuilder { public void buildHead(); public void buildList(); public ExcelObj getResult();}
具体实现:
/** * <p><b>类描述:</b> * 发票类的Excel具体实现 * </p> * <p><b>使用方式:</b> </p> * <p><b>创建时间:</b>2017年9月3日</p> * @author mengqa */public class BillExcelBuilder implements ExcelBuilder { private ExcelObj excelObj = new ExcelObj(); @Override public void buildHead() { excelObj.setTitles(new String[]{ "发票编号", "日期", "金额" }); } @Override public void buildList() { //excelObj.setDataList(dataList); } public ExcelObj getResult() { return excelObj; }}
具体的产品:
public class ExcelObj { /** * excel所有需要导出的参数对象 * 比如内容, 表头, 把那些对象都集成进来 */ private String[] titles; private List<Map<String, Object>> dataList; public String[] getTitles() { return titles; } public void setTitles(String[] titles) { this.titles = titles; } public List<Map<String, Object>> getDataList() { return dataList; } public void setDataList(List<Map<String, Object>> dataList) { this.dataList = dataList; }}
指导者:
/** * <p><b>类描述:</b> * 指挥者角色 * </p> * <p><b>使用方式:</b> </p> * <p><b>创建时间:</b>2017年9月3日</p> * @author mengqa */public class ExcelDirector { private ExcelBuilder builder; public ExcelDirector(ExcelBuilder builder) { this.builder = builder; } public void buildExcel() { builder.buildHead(); builder.buildList(); } public ExcelBuilder getBuilder() { return builder; } public void exportExcel() { this.buildExcel(); ExcelExport.export(builder.getResult()); }}
结合简单工厂模式:
/** * <p><b>类描述:</b> * 工厂方法(参数化工厂, 个人认为简单一点, 不用接口工厂了, 结构比较复杂) * </p> * <p><b>使用方式:</b> </p> * <p><b>创建时间:</b>2017年9月3日</p> * @author mengqa */public abstract class ExcelBuilderFactory { public static ExcelBuilder getBuilder(int type) { ExcelBuilder builder = null; switch (type) { case 1: builder = new OrderExcelBuilder(); break; case 2: builder = new BillExcelBuilder(); break; default: break; } return builder; }}
客户端:
public class Client { public static void main(String[] args) { // 方式2 new ExcelDirector(ExcelBuilderFactory.getBuilder(1)).exportExcel(); }}
阅读全文
0 0
- 设计模式应用 生成器模式
- 设计模式 生成器模式
- 设计模式-生成器模式
- 设计模式:生成器模式
- 设计模式----Builder(生成器)
- Java设计|生成器模式
- C++设计模式-生成器
- builder(生成器设计模式)
- 设计模式之生成器
- 设计模式 - 生成器 Builder
- 设计模式->BUILDER(生成器)
- 设计模式---生成器
- 设计模式----Builder(生成器)模式
- 设计模式之-生成器模式
- 设计模式之生成器模式
- 设计模式之生成器模式
- 【重读设计模式】生成器模式
- iOS设计模式-生成器模式
- [unity3d] 模型XRay效果实现
- 初窥ajax(一) ——封装ajax
- Class文件结构
- Android自定义view双缓存技术
- HTML/CSS导航菜单-水平菜单的制作
- 设计模式应用 生成器模式
- ZigBee_CC2530中断的使用
- 用最大似然估计求逻辑回归参数
- 查询相关
- 机房收费系统 之 建筑地基
- 40.Set、Map、TreeSet、TreeMap操作代码实战
- SGISTL源码探究-关联式容器:multiset
- NKOJ 3768 数列操作(单调队列/栈+DP)
- 浏览器标准模式和怪异模式之间的区别是什么?