设计模式(策略模式)在js上使用

117 阅读2分钟

问题:

我们系统中的实时成交统计页面中,当选择不同的业务时,实时成交信息列表的字段列展示不同。

按照以前的写法是每一种业务类型都需要判断,并返回相应的展示字段。

这种写法的缺点是

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");