问题:
我们系统中的实时成交统计页面中,当选择不同的业务时,实时成交信息列表的字段列展示不同。
按照以前的写法是每一种业务类型都需要判断,并返回相应的展示字段。
这种写法的缺点是
1.包含了很多 if-else 语句,这些语句需要覆盖所有的逻辑分支,这样会导至函数比较庞大。
2.函数缺乏弹性,如果增加了一种新的业务类型,那我们必须深入函数的内部实现,这是违反开放封闭原则的。
3.算法的复用性差,如果在程序的其他地方需要重用的话,我们只能复制和粘贴。
\
使用策略模式
我把每种业务类型要返回的字段一个个用函数封装起来,再把这些函数放到一个策略对象里。再通过returnField函数去访问,只要
传入相应的业务类型编号,就能返回需要的展示字段。
如果需要增加其他的业务,只要更改策略对象,访问方法不变。
代码如下:
/**
- 策略对象
*/
var strategies = {
"701008": function(){
return ["序号","区域","采购编号","采购项目","采购单位"...];
},
"701007": function(){
return ["序号","区域","进场编号","工程名称"...];
},
"101001": function(){
return ["序号","标的编号","宗地地点"...];
},
"901002": function(){
return ["序号","标的编号","交易类型"...];
},
"301001": function(){
return ["序号","标的编号","矿区面积"...];
},
"100002": function(){//其他
return ["序号","标的编号","交易类型"...];
}
};
/**
- 根据业务类型返回相应字段
*/
var returnField = function( businessType){
return strategies[businessType] ();
};
/**
*访问
*/
returnField("701008");