一个简单的小问题 -- 封装几个对象(107分)

  • 主题发起人 主题发起人 z_cd
  • 开始时间 开始时间
Z

z_cd

Unregistered / Unconfirmed
GUEST, unregistred user!

我正在写几个对象:
纸币收集器,硬币收集器,找钱器

有人告诉我可以写成一个MoneyControl
我觉得将它们封装成一个对象是个好主意
那么我该如何做呢?
纸币收集器中的OnNoteInsert事件和硬币收集器中的OnCoinInsert事件如何
映射成MoneyControl中的OnMoneyInsert事件呢?
(好久不接触Delphi, 都忘光了)
 
这个问题真是抽象的一塌糊涂啊,是编程的吗?
我觉得可以把MoneyControl定为基类,
纸币收集器,硬币收集器,找钱器则可以是继承自TMoneyControl
的三个子类。
至于OnNoteInsert事件和OnCoinInsert事件其实就是
Publish MoneyControl的OnMoneyInsert嘛。Override其过程就可以了。

 
不是这个意思,我的 TNoteCollector,TCoinCollector,TMoneyChanger 已经写
好了,现在我想把它们封装到一个 TMoneyControl 中使用(这样会很方便的呀),
只提取几个真正有用的方法属性和事件出来(如 CheckMoney, AmountRest,
OnMoneyInsert 等等 )。

现在是,我该如何封装最好?
 
先举一个用TMoneyControl的例子好吗? 从建立实例开始 ,简单点儿就行。
 
我不是很清楚你怎么使用TMoneyControl, 比如你建立的
是TMoneyControl的实例,但出发它的OnMoneyInsert事件时
如何判断此对象是TNoteCollector 还是 TCoinCollector 吗?
 
I want use like:

A.如果顾客付了足够商品的钱
if MoneyControl.CheckMoney(25.30) then Robot.GetGoods(xxx);

B.如果顾客投币或塞钱, 在 OnMoneyInsert 事件中我想更新用户界面

C.如果顾客结束购物,得找他钱
if Key = Chr(27) Then MoneyControl.MoneyBack;

如果我同时使用那三个对象来工作,我可要麻烦死了。
所以我想将它们封装成一个好用的对象 MoneyControl

can u understand?
 
如果你的MoneyControl内部可以判断自己是那种东东的话,比如通过
ControlType属性。
就在其OnMoneyInsert事件里

case ControlType of
TNoteCollector :
begin
ANoteCollector:=TNoteCollector.create;
ANoteCollector.OnNoteInsert;
ANoteCollector.destroy;
end;
TCoinCollector:
begin
..........
end;

这个答案可以吗?
 
前提是TMoneyControl有相应的域。
不过总觉得这样的做法怪怪的,感觉要是定义了一个基类,
利用Object Pascal的多态和继承的话,思路要清晰一些。

没做过这样的东西,可能说的不对。
 
cheka真够耐心,谢谢。
我只是不知道如何定义MoneyControl最好

不管哪种Money, 只要一有insert都会触发MoneyControl的OnMoneyInsert事件,
然后我在OnMoneyInsert中更新我的UI

好久不接触Delphi,我基本的都忘了,我想知道的是如何定义MoneyControl
如何将三个对象封装到一个对象中,一般的做法是什么?
 
一些Delphi的书里有“聚合”的内容,比如《技术内幕》,可以找来一看。
不过主要是针对一些可视组件的。

按你的要求我大概写一个吧

TMoneyControl = Class
private
FNoteCollector:TNoteCollector;
FCoinCollector:TCoinCollector;
FMoneyChager:TMoneyChanger;
FMoneyInsert:TNotifyEvent;
protected
procedure MoneyInsert;
public
constructor Create;override;
property NoteCollector:TNoteCollector read FNoteCollector;
property CoinCollector:TCoinCollector read FCoinCollector;
property MoneyChanger:TMoneyChanger read FMoneyChanger;
property OnMoneyInsert:TNotifyEvent read FMoneyInsert
write FMoneyInsert;
end;


嘿嘿,最好还是去看看书吧。
 
刚才忘加ControlType了。 另外,先前的Case代码有误,
要把Create和destroy去掉。
 
zcd不是要申明,是要调用事件嘛,继续……
 
差不多了,直接发工资吧
 
多人接受答案了。
 
后退
顶部