有一堆版本号, 如
v1.2.3
R0102-0003
0003interface ispecialversionformatrule { public string getformatrule(); }
class simpleversion { int _major, _minor, _build;   }   //for v1.2.3
class spversion1 : simpleversion, ispecialversionformatrule {  }  //for R0102-0003
class spversion2 : simpleversion, ispecialversionformatrule {  }  //for 0003
然后一个输入框, 输入一个字符串, 转换为simpleversion类class VersionManager {
public static simpleversion getPreferredClass(string verstr) { ....//TODO!!!!! }
}
在TODO那里, 我该用什么模式来转换?
在simpleversion类里面有virtual IsValid然后其它两个类都override了.
我不可能if(!new SimpleVersion(verstr).IsValid()){ if(!new SpVersion1(verstr).IsValid())..... }这样搞吧. 不然我以后要扩展更多的version号那效率在这里会浪费不少.求解决方案, 整个给我改了也行.

解决方案 »

  1.   

    如果用责任链的话, 一样的效率. 并没有多大提高. 还是免不了new SpVersion(verstr).IsValid()
      

  2.   

    感觉上,这个问题实现一个从string到version类的强制转换的重载比较好
      

  3.   

    楼上的,你是说myversionclass : string吗?
      

  4.   

    new SimpleVersion(verstr).IsValid() 楼主这个SimpleVersion实例化出来以后根据多态性就能知道到底是spversion1 还是spversion2,所以isvalid也是针对改实例的isvalid 这里不需要设计模式吧