如何实现1个父类的多个子类的实例,分别同时运行一个方法. ( 积分: 50 )

  • 主题发起人 主题发起人 GrassDragon
  • 开始时间 开始时间
G

GrassDragon

Unregistered / Unconfirmed
GUEST, unregistred user!
比如:
有一个父类:TA,
它的子类有TB1,TB2,TB3...,
子类的TB1的实例对象B1,TB2的实例对象B2,TB3的实例对象B3....
我希望实现:当B1执行方法Test的时候,B2、B3...等等都能执行Test。
该如何做,谢谢指教!
 
TA = class
private
FChild: TList

protected
procedure Add2Manager(o: TA);
public
procedure test;virtual;
constructor create
//创建FChild
end;
procedure TA.test;
begin
for i := 0 to FChild.count -1 do
if self <> TA(FChild.Items) then
TA(FChild.Items).test;
end;

procedure TA.Add2Manager(o: TA);
begin
FChild.AddObject(o);
end;

TB = class(TA)
private
...
public
procedure test;override;
constructor create;
end;

constructor TB.create;
begin
inherited;
....
Add2Manager(self);
end;
 
更好的实现这个是设计模式中的Observer,Subject模式,请参考设计模式中详细描述
 
hanpengshan_00,我明白你的意思了,用List,谢谢您的答复。
但是我还更想知道Observer,Subject模式,能说明白些吗?
 
hanpengshan_00:
能否根据我的问题,做个Observer,Subject模式的代码示例?
非常感谢.
 
{
观察者接口
}
IObserver = interface
procedure Update(TheChangedSubject: ISubject);
procedure UpdateByParam(Sender: TObject
aParam: Variant);
end;
{
被观察者接口
}
ISubject = interface
procedure AddListener(AnObserver: IObserver);
procedure RemoveListener(AnObserver: IObserver);
procedure Notify();
procedure NotifyByParam(Sender: TObject
aParam: Variant);
end;
对于TA或TA的子类,既是观察者也是监听者,所以它们要同时实现IObserver,ISubject接口
当Subject(这里就是TA的某个子类TB要调用test了)改变时候,就通知观察者(除TB外其他实例),通过调用update或updateByparam实现,如果有多个观察者,需要循环调用
TA = class( ..,IObserver, IUpdater) TA应该类市这样定义的
...
end;
 
谢谢您的答复.
关于Observer,Subject模式,我还不是很清楚,我再看看.谢谢
 
后退
顶部