题目: 根据公司业务要求﹐需要开发一个染房染机生产控制的类﹐该类包含所有染机目前的状态及染布的数据﹐所有的数据5分钟对外公布一次﹔开发两个显示数据的类分别提供给不同的用户看﹐不同用户所关心的数据不同﹐可能连显示用户有界面也不同﹐而且以后可能需要开发另外一个类来显示数据(不能改变染房染机生产控制类的代码)﹐请分别设计前三个类。注﹕不需要注意问题的细节﹐关键是实现程序的结构﹐自定义类的名字。请大家讨论下,最好能给出程序的代码,谢谢!
解决方案 »
- 请问,这个线程,为什么输出不一样
- WPF中 自定义ListViewItem中的CellTemplate的问题
- DataGridView
- 超难问题(C#重写C结构)
- 还有我直接点开mdb文件access提示我“数据库为只读“要如何解决此问题!先谢了!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- [求助]如何使用vc++6.0提取网页代码??清高手指点!!!
- 怎样用代码实现报表Web服务?谢谢
- 菜鸟第二问:怎样通过表里面一个字段名下的某项内容获得同一张表里另一个字段下的内容?
- c# 中括号及字符含义 [****** ]
- asp.net中如何接收asp登录时设置的Session值,请高手讲解一下,
- 如何将手机接收到的短信信息显示?
- 如何抓取当前活动窗体的子窗体?
CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件
界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx
下载:http://szlawbook.com/csdnv2
{
public void 染机状态(..){;}
public void 染布数据(..)
}abstart class 显示数据抽象类
{
生产控制类 生产控制类=new 生产控制类
public void 计算显示数据(..){;}}
class 显示数据类A:显示数据抽象类
{
public void 计算显示数据(..){;}}class 显示数据类B:显示数据抽象类
{
public void 计算显示数据(..){;}}.....class 显示数据类N:显示数据抽象类
{
public void 计算显示数据(..){;}}
class 显示数据工厂类
{
public 显示数据类A getinstanceA(..){;}
public 显示数据类B getinstanceB(..){;}
...
public 显示数据类N getinstanceN(..){;}
}class 显示用户界面
{
public void 显示用户界面(..)
{
显示数据抽象类=显示数据工厂类.getinstanceA();
do with......
}
}
{
public void 染机状态(..){;}
public void 染布数据(..){;}
}abstart class 显示数据抽象类
{
生产控制类 生产控制类=new 生产控制类
public void 计算显示数据(..){;}}
class 显示数据类A:显示数据抽象类
{
public override void 计算显示数据(..){;}}class 显示数据类B:显示数据抽象类
{
public override void 计算显示数据(..){;}}.....class 显示数据类N:显示数据抽象类
{
public override void 计算显示数据(..){;}}
class 显示数据工厂类
{
public 显示数据类A getinstanceA(..){;}
public 显示数据类B getinstanceB(..){;}
...
public 显示数据类N getinstanceN(..){;}
}class 显示用户界面
{
public void 显示用户界面(..)
{
显示数据抽象类=显示数据工厂类.getinstanceA();
do with......
}
}
伪代码如下:
public class DataEventArgs:EventArgs
{
将要发送的数据存储于此;
}
public delegate void dataPass(object sender,DataEventArgs args);
public class 染机生产控制类
{
public event dataPass dataPassEvent;
定义一个定时器;
public void 定时器每隔五秒的回调函数
{
获得所有要发送的数据;
将要发送的数据存储在DataEventArgs中;
if(dataPassEvent!=null)
{
dataPassEvent(this,DataEventArgs);
}
}
}
public class 显示数据类1
{
public 染机生产控制类 control = new 染机生产控制类();
public 显示数据类1()
{
control.dataPassEvent += new dataPassEvent(数据显示函数);
}
public static void 数据显示函数
{
根据用户角色显示数据;
}
}
public class 显示数据类2
{
public 染机生产控制类 control = new 染机生产控制类();
public 显示数据类1()
{
control.dataPassEvent += new dataPassEvent(数据显示函数);
}
public static void 数据显示函数
{
根据用户角色显示数据;
}
}
大概是这样了,以上只是写出了意思,有些函数名字实在记不清了
但如果考虑这个题简化下也可考虑单一工厂模式
即一个显示工厂显示所有的数据类.
在生产控制类里面定义事件,在namespace里面定义数据的格式(struct? class?都可以)。
生产控制类只管把数据以定义好的格式定时抛出
显示类只不过是对数据格式的一个解释而已,定义出interface,然后根据不同的需要实现具体的操作
今天看了下《设计模式》这应该考得是涉及模式中的观察者(observer)模式吧。
在C#中通过代表和事件好像也可以实现observer模式。
所以 HopeInDark(子弹) 的代码应该可以达到要求。 ByWangler(冰凌) 的工厂模式不知能否达到要求,大家发表下意见呀。
ByWangler(冰凌) 的方法在顯示不同界面時恐怕會有很多重復代碼吧, 不知道樓主說的界面不同指的是什麼意思,如果僅僅是顏色或者位置變化,即通常的換膚;如果同一個界面上連元素都不一樣,那就更加復雜了。应该是显示不同的数据,可能生产人员关心的是明显数据,而老板关心的是汇总数据.具体怎么显示应该不用考虑.而且也不用实现具体显示的代码.
public class 生产控制类
{
public ArrayList 染机编号数组;
public ArrayList 染布编号数组; public bool 染机状态(染机编号){;}
public DataTable 染机状态(染机编号数组){;} public DataRow 染布数据(染布编号){;}
public DataTable 染布数据(染布编号数组){;}
}public class 显示染布数据类:生产控制类
{
private string userid;
public string Userid;
{
set{userid=value;}
}
switch(Userid)
{
case "1":
染布编号数组=value2;
break;
......
}
UI=染布数据(染布编号数组);
}
public class 显示染机数据类:生产控制类
{
private string userid;
public string Userid;
{
set{userid=value;}
}
switch(Userid)
{
case "1":
染机编号数组=value2;
break;
......
}
UI=染机状态(染机编号数组);
}
struct Machine_Status{...}; //染机状态属性
struct Product_Statistics{...}; //染布数据属性
public: Produce_Control();
~Produce_Control();
void Statistics_Publish(float time_number); //数据公布,参数为公布间隔时间
protect: Machine_Status Status(int machine_number); //染机状态生成方法,参数为染机编号
Product_Statistics Statistics(int product_number); //染布数据生成方法,参数为染布编号
};
class Show1 : public Produce_Control{
void Show1_Interface(); //显示用户1的界面
public: Show1();
~Show1();
void Show1_Statistics(); //显示用户1的数据
};
class Show2 : public Produce_Control{
void Show2_Interface(); //显示用户2的界面
public: Show2();
~Show2();
void Show2_Statistics(); //显示用户2的数据
};
呵呵
你的鸟代码简直是le se
{
public abstract string ShowDataAA();
public abstract string ShowDataBB();
public abstract string ShowDataCC();
}
public class AA : A
{
public override string ShowDataAA();
}public class BB : A
{
public override string ShowDataBB();
}小儿科,和设计模式有关系嘛???????????????????不要注重细节呀
{
public abstract string ShowDataAA();
public abstract string ShowDataBB();
public abstract string ShowDataCC();
}
public class AA : A
{
public override string ShowDataAA();
}public class BB : A
{
public override string ShowDataBB();
}小儿科,和设计模式有关系嘛???????????????????不要注重细节呀
{
public abstract string ShowData();
}
public class AA : A
{
public override string ShowData();
}public class BB : A
{
public override string ShowData();
}这样可能更好一点.
koenemy() 的代码似乎跟对需求理解得不够全面。
ByWangler(冰凌) 的生产控制类在每一种显示的实力里面有重复
我菜鸟,在冰凌的基础上瞎改改
class 生产控制类
{
public void 染机状态(..){;}
public void 染布数据(..){;}
}abstart class 显示数据抽象类
{
public void 计算显示数据(生产控制类 的引用){;}}
class 显示数据类A:显示数据抽象类
{
public override void 计算显示数据(生产控制类 的引用){;}}class 显示数据类B:显示数据抽象类
{
public override void 计算显示数据(生产控制类 的引用){;}}.....class 显示数据类N:显示数据抽象类
{
public override void 计算显示数据(生产控制类 的引用){;}}
class 显示数据工厂类
{
生产控制类 生产控制=new 生产控制类
public 显示数据类A getinstanceA(..){return new 显示数据类A(生产控制);}
public 显示数据类B getinstanceB(..){;}
...
public 显示数据类N getinstanceN(..){;}
}class 显示用户界面
{
public void 显示用户界面(..)
{
显示数据抽象类=显示数据工厂类.getinstanceA();
do with......
}
}
首先说偶菜鸟,大家不要b4我。主要是针对代码重复的地方作的修改,采用组合的方式(参数)来搞定,同时也体现了显示数据类对生产控制类的参数依赖(这些名词都是上课学来的……)
{
构造函数(){this.start();}
public void start(){ //启动一个线程每隔5分钟更新一次数据 }
public 容器 染机状态;
public 容器 染布数据;
}abstart class 显示数据抽象类
{
public void 计算显示数据(生产控制类 的引用){;}}
class 显示数据类A:显示数据抽象类
{
public override void 计算显示数据(生产控制类 的引用){;}}class 显示数据类B:显示数据抽象类
{
public override void 计算显示数据(生产控制类 的引用){;}}.....class 显示数据类N:显示数据抽象类
{
public override void 计算显示数据(生产控制类 的引用){;}}
class 显示数据工厂类
{
生产控制类 生产控制=new 生产控制类
public 显示数据类A getinstanceA(..){return new 显示数据类A(生产控制);}
public 显示数据类B getinstanceB(..){;}
...
public 显示数据类N getinstanceN(..){;}
}class 显示用户界面
{
public void 显示用户界面(..)
{
显示数据抽象类=显示数据工厂类.getinstanceA();
do with......
}
}
补充一下我的想法,刚才忘了5分钟一次那个东西了~
<所有的数据5分钟对外公布一次>,这说明类是主动发布数据,而不是每5分钟采样一次后被动的等别人来取数据.所以类中应该编一个事件.
还是那句话:我认为"生产控制的类"中定时事件和静态变量是它的关键.
>>smalllixin(myfox) 你的代码有问题,请注意要求
>><所有的数据5分钟对外公布一次>,这说明类是主动发布数据,而不是每5分钟采样一次后被动的>>等别人来取数据.所以类中应该编一个事件.
>>还是那句话:我认为"生产控制的类"中定时事件和静态变量是它的关键.每五分钟发一个通知再让客户端来取数据行不行?
这里有两种发布数据的方式,一种是PUSH,一种是PULL,两种方式的优缺点已经在observer模式中讨论的很清楚了,所以没必要抠字眼