|
减少或不使用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");
|
|