减少或不使用switch,大家有什么好的方法,使用工厂方法来处理,可以创建一个工厂接口,然后每个方法设计为一个工厂类,并实现工厂接口,感兴趣的朋友可以了解下
Insus.NET的解决方法,是使用工厂方法来处理,可以创建一个工厂接口,然后每个方法设计为一个工厂类,并实现工厂接口。 
工厂接口: 
复制代码 代码如下:
 
IGetFactory 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
/// <summary> 
/// Summary description for IGetFactory 
/// </summary> 
namespace Insus.NET 
{ 
public interface IGetFactory 
{ 
string GetResult(); 
} 
} 
Get工厂类:
复制代码 代码如下:
 
GetFactory 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
/// <summary> 
/// Summary description for GetFactory 
/// </summary> 
namespace Insus.NET 
{ 
public class GetFactory : IGetFactory 
{ 
public GetFactory() 
{ 
// 
// TODO: Add constructor logic here 
// 
} 
public string GetResult() 
{ 
return "get"; 
} 
} 
} 
GetTest类:
复制代码 代码如下:
 
GetTestFactory 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
/// <summary> 
/// Summary description for GetTestFactory 
/// </summary> 
namespace Insus.NET 
{ 
public class GetTestFactory : IGetFactory 
{ 
public GetTestFactory() 
{ 
// 
// TODO: Add constructor logic here 
// 
} 
public string GetResult() 
{ 
return "gettest"; 
} 
} 
} 
以及GetSet类:
复制代码 代码如下:
 
GetSetFactory 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
/// <summary> 
/// Summary description for GetSetFactory 
/// </summary> 
namespace Insus.NET 
{ 
public class GetSetFactory : IGetFactory 
{ 
public GetSetFactory() 
{ 
// 
// TODO: Add constructor logic here 
// 
} 
public string GetResult() 
{ 
return "getset"; 
} 
} 
} 
因此你的代码最终变为:
复制代码 代码如下:
 
View Code 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using Insus.NET; 
public partial class _Default : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
} 
public string Exec(string mothedName) 
{ 
string ret = ""; 
//switch (mothedName) 
//{ 
// case "get": 
// ret = get(); 
// break; 
// case "get1": 
// ret = gettest(); 
// break; 
// //..... 
// case "testget": 
// ret = getrset(); 
// break; 
//} 
IGetFactory get = new GetTestFactory(); //这里是实现工厂类 
ret = get.GetResult(); 
return ret; 
} 
//public string get() 
//{ 
// return "get"; 
//} 
//public string gettest() 
//{ 
// return "gettest"; 
//} 
//public string getrset() 
//{ 
// return "getset"; 
//} 
} 
15:50修改补充如下:
上面的最终代码,无传入参数mothedName,怎样办,我们可以虑一下反射,如果改为反射击,那传入的参数需要规范一下方可以:
"get" >>"Get";
"get1" >>"GetTest"
"testget" >> "GetSet"
这样一改之后,就可以使用反射语法了,可以把
复制代码 代码如下:
 
IGetFactory get = new GetTestFactory(); //这里是实现工厂类 
改为(下面是asp.net的应用):
复制代码 代码如下:
 
IGetFactory get = (IGetFactory)Assembly.Load("App_Code").CreateInstance("Insus.NET." + mothedName + "Factory"); 
如果在非asp.net下,可以把"App_Code"改为"程序集名称":
复制代码 代码如下:
 
IGetFactory get = (IGetFactory)Assembly.Load("程序集名称").CreateInstance("Insus.NET." + mothedName + "Factory"); 
您可能感兴趣的文章:
