110,535
社区成员
发帖
与我相关
我的任务
分享
namespace Builder
{
/*
* 需求:通过使用不同模块号(MODULE)和功能号(FUNC)及数据
* 生成不同的数据包
*/
/// <summary>
/// 模块号
/// </summary>
public enum MODULE { MODULE1, MODULE2, MODULE3, MODULE4 }
/// <summary>
/// 功能号
/// </summary>
public enum FUNCTION { FUNC1, FUNC2, FUNC3, FUNC4 }
/// <summary>
/// 生成器接口
/// </summary>
public interface IBuilder
{
Object Generate();
}
/// <summary>
/// 数据生成器
/// </summary>
public abstract class DataBuilder : IBuilder
{
protected MODULE M = MODULE.MODULE1;
protected FUNCTION F = FUNCTION.FUNC1;
protected string Datas = string.Empty;
public DataBuilder(MODULE m, FUNCTION f, string datas)
{
M = m;
F = f;
Datas = datas;
}
/// <summary>
/// 构建 -- 抽象成员函数
/// </summary>
/// <returns></returns>
protected abstract Object Build();
#region IBuilder 成员
public object Generate()
{
return this.Build();
}
#endregion
}
// MOUDLE1 生成器
namespace MODULE1
{
/// <summary>
/// FUNCTION1 生成器
/// </summary>
public class DataBuilder1 : DataBuilder
{
public DataBuilder1(MODULE m, FUNCTION f, string datas)
: base(m, f, datas)
{
}
protected override object Build()
{
return M.ToString() + " " + F.ToString() + " " + Datas;
}
}
/// <summary>
/// FUNCTION2 生成器
/// </summary>
public class DataBuilder2 : DataBuilder
{
public DataBuilder2(MODULE m, FUNCTION f, string datas)
: base(m, f, datas)
{
}
protected override object Build()
{
return M.ToString() + " " + F.ToString() + " " + Datas;
}
}
public class DataBuilder3 : DataBuilder
{
public DataBuilder3(MODULE m, FUNCTION f, string datas)
: base(m, f, datas)
{
}
protected override object Build()
{
return M.ToString() + " " + F.ToString() + " " + Datas;
}
}
public class DataBuilder4 : DataBuilder
{
public DataBuilder4(MODULE m, FUNCTION f, string datas)
: base(m, f, datas)
{
}
protected override object Build()
{
return M.ToString() + " " + F.ToString() + " " + Datas;
}
}
}
// MODULE2 生成器
namespace MODULE2
{
public class DataBuilder1 : DataBuilder
{
public DataBuilder1(MODULE m, FUNCTION f, string datas)
: base(m, f, datas)
{
}
protected override object Build()
{
return M.ToString() + " " + F.ToString() + " " + Datas;
}
}
public class DataBuilder2 : DataBuilder
{
public DataBuilder2(MODULE m, FUNCTION f, string datas)
: base(m, f, datas)
{
}
protected override object Build()
{
return M.ToString() + " " + F.ToString() + " " + Datas;
}
}
public class DataBuilder3 : DataBuilder
{
public DataBuilder3(MODULE m, FUNCTION f, string datas)
: base(m, f, datas)
{
}
protected override object Build()
{
return M.ToString() + " " + F.ToString() + " " + Datas;
}
}
public class DataBuilder4 : DataBuilder
{
public DataBuilder4(MODULE m, FUNCTION f, string datas)
: base(m, f, datas)
{
}
protected override object Build()
{
return M.ToString() + " " + F.ToString() + " " + Datas;
}
}
}
namespace MODULE3
{
.....
.....
.....
.....
}
namespace MODULE4
{
.....
.....
.....
.....
}
/// <summary>
/// 生成器上下文
/// </summary>
public static class BuilderContext
{
private static IBuilder GetBuilder(MODULE m, FUNCTION f, string datas)
{
IBuilder builder = null;
switch (m)
{
case MODULE.MODULE1:
switch (f)
{
case FUNCTION.FUNC1:
builder = new MODULE1.DataBuilder1(m, f, datas);
break;
case FUNCTION.FUNC2:
builder = new MODULE1.DataBuilder2(m, f, datas);
break;
case FUNCTION.FUNC3:
builder = new MODULE1.DataBuilder3(m, f, datas);
break;
case FUNCTION.FUNC4:
builder = new MODULE1.DataBuilder4(m, f, datas);
break;
default:
break;
}
break;
case MODULE.MODULE2:
switch (f)
{
case FUNCTION.FUNC1:
builder = new MODULE2.DataBuilder1(m, f, datas);
break;
case FUNCTION.FUNC2:
builder = new MODULE2.DataBuilder2(m, f, datas);
break;
case FUNCTION.FUNC3:
builder = new MODULE2.DataBuilder3(m, f, datas);
break;
case FUNCTION.FUNC4:
builder = new MODULE2.DataBuilder4(m, f, datas);
break;
default:
break;
}
break;
case MODULE.MODULE3:
.......
.......
.......
break;
case MODULE.MODULE4:
.......
.......
.......
break;
default:
break;
}
return builder;
}
public static object GetBuildData(MODULE m, FUNCTION f, string datas)
{
IBuilder builder = GetBuilder(m, f, datas);
if (null != builder)
{
return builder.Generate();
}
return builder;
}
}
/* 调用示例:
class Program
{
static void Main(string[] args)
{
object datas = BuilderContext.GetBuildData(MODULE.MODULE1, FUNCTION.FUNC2, "Hello world!");
Console.WriteLine(datas);
Console.ReadKey();
}
}
*/
}
class Program
{
static void Main(string[] args)
{
object datas = BuilderContext.GetBuildData(MODULE.MODULE1, FUNCTION.FUNC2, "Hello world!");
Console.WriteLine(datas);
Console.ReadKey();
}
}
public enum FUNCTION { DataBuilder1, DataBuilder2, ...}
Type t = Type.GetType(m.ToString() + "." + f.ToString());
DataBuilder builder = (DataBuilder)Activator.CreateInstance(t, m, f, datas);
return M.ToString() + " " + F.ToString() + " " + Datas;
。