青草_草帽

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

最近C#的泛型使用频次略多,特在此记下一个印象深刻的。

情景如下,

基类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  }

这样总算让我舒服了些... 以后即使要改变初始化时的参数个数改动也相对少了很多... 

 

 

posted on 2013-10-26 22:49  青草_草帽  阅读(478)  评论(0编辑  收藏  举报