如何更改我现有的代码,使其更具扩展性?
需求:通过使用不同模块号(MODULE)和功能号(FUNC)及数据生成不同的数据包
现有代码如下:
现有代码如下:
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();
}
}
*/
}
...全文
相关推荐
JAVA程序员笔试面试题汇总及答案
- **继承**:继承允许创建新类来继承现有类的特性和行为。这样可以在不重复编写代码的情况下复用现有功能,从而提高代码的可维护性和可扩展性。
使用ASP.NET for SEO进行URL重写
IIS URL重写模块是IIS服务器上的一个功能,可以在服务器级别定义重写规则,无需更改应用程序代码。在IIS管理器中添加重写规则,或者在`web.config`中配置,可以实现URL重写。
代码库运维的扩展性架构.pptx
- **促进代码的可追溯性和变更审查**:记录所有代码更改及其提交者和时间戳,这对于维护代码质量和安全性至关重要。
重新布线:对Elixir进行依赖注入。 零代码更改要求
**提高可扩展性**:当需要添加新功能或改变现有功能时,由于依赖是通过接口传递的,我们可以在不影响其他组件的情况下替换或扩展服务。使用Rewire库的步骤大致如下:1.
软件可扩展性实践.ppt
“对于扩展是开放的”:意味着系统设计应允许通过添加新的组件或模块来扩展其功能,而不是修改现有的代码。2.


