首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

100分请问一个设计有关问题?路过的都进来看看,多谢

2012-02-24 
100分请教一个设计问题?路过的都进来看看,谢谢!我把问题简化了,简化后是这样的:有两组数据OneGroup,TwoGro

100分请教一个设计问题?路过的都进来看看,谢谢!
我把问题简化了,简化后是这样的:
有两组数据OneGroup,TwoGroup,每组有两个数第一组one,two,第二组three,four,
程序接收到数据是一个字符串,例如:OneGrouptypeonedata123,代表第一组数据的one为123,type,data为分隔符.数据经过分析后分别存入one,two,three,four
当第一组数据接收完毕的时候存入数据库,并清空,重新开始接收下一组数据,第二组也是这样.
我混乱了,不知道这个几个类及接口应该怎么设计.

我的想法:onegro=new   onegroup();twogro=new   twogroup();//类里面判断,当变量为空的时候进行+1,当不为空的时候认为是更改数据,不加1,当为1了(从0开始的)进行存入数据库,清空变量操作.
但是问题来了,我的数据是在别的类里面出过来的,在别的类里面new了,下一次又new了,那计数的永远也+不到1了吗,而且会清空原来的数,我把他设计成全局的变量程序会变的非常的麻烦,我应该怎么做呢???


[解决办法]
声明字段有什么问题吗?
private onegro = new onegroup();
private twogro = new twogroup();

看不明白楼主的问题
有没有可调试的代码参考一下
[解决办法]
LZ试下 单件模式
或者来个简单的,用静态变量,
[解决办法]
不会,帮顶了
[解决办法]
你的需求描述比较混乱
singleton模式的介绍和事例
http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/builddistapp/Exploring+the+Singleton+Design+Pattern.mspx?mfr=true
上面这篇文章比较老,似乎没有考虑多线趁的安全
http://www.yoda.arachsys.com/csharp/singleton.html
这篇文章中有考虑多现成安全的例子
public sealed class Singleton
{
static Singleton instance=null;
static readonly object padlock = new object();

Singleton()
{
}

public static Singleton Instance
{
get
{
lock (padlock)
{
if (instance==null)
{
instance = new Singleton();
}
return instance;
}
}
}
}

但是也是framework1.1版本上的 不过足够用了
2.0有个新的关键字 我一下字找不到了 如果你不用多线城那么第一篇文章对你就足够了
[解决办法]
public class Group
{
private string one = " ";
private string tow = " ";
private string three = " ";
private string four = " ";
private string reset_flag = "0000 ";
public Group()
{
}

private void SaveToDB(string num1,string num2)
{
//保存到数据库
}

public void Clear(int flag)
{
//清空的方法
if (flag == 1)
{
one = " ";
tow = " ";
//将标志位还原为0
ChangeFlag(1, "0 ");
ChangeFlag(2, "0 ");
}
else
{
three = " ";
four = " ";
//将标志位还原为0
ChangeFlag(3, "0 ");
ChangeFlag(4, "0 ");
}
}
//解析传入字符串,按照解析出来的结果将值赋给相应的数据成员,同时更新reset_flag的对应位上的数字为1;
private void ChangeFlag(int num,string des)
{
reset_flag = reset_flag.Substring(0, num - 1) + des + reset_flag.Substring(num + 1);
}

public void DecodeNum(string value)
{

if (解析结果是one)
{
//给one赋值
ChangeFlag(1, "1 ");
}
else if (解析结果是tow)
{
//给tow赋值
ChangeFlag(2, "1 ");
}
else if (解析结果是three)
{
//给three赋值
ChangeFlag(3, "1 ");


}
else if (解析结果是four)
{
//给four赋值
ChangeFlag(4, "1 ");
}

if (reset_flag.Substring(0, 2) == "11 ")
{
SaveToDB(one, tow);
Clear(1);
}

if (reset_flag.Substring(2, 2) == "11 ")
{
SaveToDB(three, four);
Clear(2);
}

}
}
把这个类的对象作为需要接受值的类的对象成员,在要接受值的类实例化同时实例化这个类
用DecodeNum方法去接收传入的字符串就行
如果非要进行多次实例化,请将私有成员声明成Static

热点排行