最近看到项目里一段代码如下:
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语句。有没有更好的方法呢?这种代码怎么改写?
每个CUSTOMSTYPE对应不同的实现。
你创建一个简单工厂就好。
工厂一样要写if吧。
@fw123:
嗯,是的。
不知道你具体需求,从你的代码来看。
CUSTOMSTYPE不同IDownload的实现也不同。
也就是说你文中提到的,CUSTOMSTYPE如果再有增加,那么你也必须有对应的实现。
比如:new EE();new FF();。
你创建简单工厂,把这里实现封装起来。调用者不用关心IDownload的具体实现,挺好的事。
最后如果你有好的想法,希望能分享出来。
@写代码的小2B: CUSTOMSTYPE如果再有增加,那么你也必须有对应的实现(是的)。所以头痛,将来会有多少if...,我也在依靠网络的力量,寻找更好的解决方案。
每次if下面的执行相同么?
excel.IDownload 的实现不一样