开通VIP,畅享免费电子书等14项超值服
首页
好书
留言交流
下载APP
联系客服
2013.10.28
情景如下,
基类BaseClass 有一系列的子类 SubClass1, SubClass2, SubClass3... 且其构造函数的参数较多。使用工厂模式实例化子类的代码大致如下:
1 BaseClass CreateInstance(TYPE type, object param1, object param2, object param3, object param4) 2 { 3 BaseClass instance = null; 4 switch(type) 5 { 6 case type1: instance = new SubClass1(param1, param2, param3, param4);break; 7 case type2: instance = new SubClass2(param1, param2, param3, param4);break; 8 case type3: instance = new SubClass3(param1, param2, param3, param4);break; 9 ...10 }11 return instance;12 }
上面代码,个人觉得不够简洁,特别是每拷贝粘贴一行都有种被恶心到的感觉...
所以使泛型重写上面的实现:
在BaseClass中加入虚函数Init(object param1, object param2, object param3, object param4); 并将其构造函数改为无参,其各子类都如此改造。这样上面的实例化子类的代码则变为
1 BaseClass CreateInstance(TYPE type, object param1, object param2, object param3, object param4) 2 { 3 BaseClass instance = null; 4 switch(type) 5 { 6 case type1: instance = CreateInstance<SubClass1>();break; 7 case type2: instance = CreateInstance<SubClass2>();break; 8 case type3: instance = CreateInstance<SubClass3>();break; 9 ...10 }11 instance.Init(param1, param2, param3, param4);12 return instance;13 }14 15 T CreateInstance<T>() where T : BaseClass, new()16 {17 T t = new T();18 return t;19 }
这样总算让我舒服了些... 以后即使要改变初始化时的参数个数改动也相对少了很多...
微信登录中...请勿关闭此页面