【Delphi】Utils.EventBus
unit Utils.EventBus;
interface
uses
System.Classes;
type
IEventBus = interface(IUnknown)
procedure Notify(information: TObject);
end;
////////////////////////////////////////////////////////////////////////////////
TEventBus = class(TObject)
private
subscribers: TInterfaceList;
public
constructor Create;
destructor Destroy; override;
procedure Attach(subscriber: IEventBus);
procedure Detach(subscriber: IEventBus);
procedure Push(information: TObject);
end;
implementation
constructor TEventBus.Create;
begin
subscribers := TInterfaceList.Create;
end;
destructor TEventBus.Destroy;
begin
subscribers.Free;
subscribers := nil;
inherited Destroy;
end;
procedure TEventBus.Attach(subscriber: IEventBus);
begin
subscribers.Lock;
try
if subscribers.IndexOf(subscriber) < 0 then begin
subscribers.Add(subscriber);
end;
finally
subscribers.Unlock;
end;
end;
procedure TEventBus.Detach(subscriber: IEventBus);
begin
subscribers.Lock;
try
if subscribers.IndexOf(subscriber) > -1 then begin
subscribers.Remove(subscriber);
end;
finally
subscribers.Unlock;
end;
end;
procedure TEventBus.Push(information: TObject);
var
i: Integer;
begin
subscribers.Lock;
try
for i := 0 to subscribers.Count - 1 do begin
IEventBus(subscribers.Items[i]).Notify(information);
end;
finally
subscribers.Unlock;
end;
end;
end.
本文作者:XKIND
本文链接:https://www.cnblogs.com/zhuzhongxing/p/14147080.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步