首页 新闻 会员 周边 捐助

这种代码怎么改写?以致于在下次增加CUSTOMSTYPE时,不用更改代码。

0
悬赏园豆:5 [已解决问题] 解决于 2016-04-12 18:06

最近看到项目里一段代码如下:

excelObject excel = new excelObject();
if (loadbill.CustomsType == 1)
excel.IDownload = new AA();

if (loadbill.CustomsType == 2)
excel.IDownload = new BB();

if (loadbill.CustomsType == 3)
excel.IDownload = new CC();

if (loadbill.CustomsType == 4)
excel.IDownload = new DD();

 

如果下回业务再来个CustomsType =5,6,7,8,9...N,又要改代码加 if语句。有没有更好的方法呢?这种代码怎么改写?

fw123的主页 fw123 | 初学一级 | 园豆:197
提问于:2016-04-12 15:48
< >
分享
最佳答案
-1

每个CUSTOMSTYPE对应不同的实现。

你创建一个简单工厂就好。

收获园豆:5
写代码的小2B | 老鸟四级 |园豆:4377 | 2016-04-12 16:00

工厂一样要写if吧。 

fw123 | 园豆:197 (初学一级) | 2016-04-12 16:32

@fw123: 

嗯,是的。

不知道你具体需求,从你的代码来看。

CUSTOMSTYPE不同IDownload的实现也不同。

也就是说你文中提到的,CUSTOMSTYPE如果再有增加,那么你也必须有对应的实现。

比如:new EE();new FF();。

你创建简单工厂,把这里实现封装起来。调用者不用关心IDownload的具体实现,挺好的事。

 

最后如果你有好的想法,希望能分享出来。

写代码的小2B | 园豆:4377 (老鸟四级) | 2016-04-12 16:40

@写代码的小2B: CUSTOMSTYPE如果再有增加,那么你也必须有对应的实现(是的)。所以头痛,将来会有多少if...,我也在依靠网络的力量,寻找更好的解决方案。

fw123 | 园豆:197 (初学一级) | 2016-04-12 16:56
其他回答(1)
1

每次if下面的执行相同么?

Ctrl` | 园豆:3317 (老鸟四级) | 2016-04-12 15:53

excel.IDownload 的实现不一样

支持(0) 反对(0) fw123 | 园豆:197 (初学一级) | 2016-04-12 16:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册