日期:2014-05-19  浏览次数:20685 次

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 ");