艺术剪刀 發表於 2020-12-3 14:51:00

【Delphi】Utils.EventBus

<pre><code class="language-delphi">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) &lt; 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) &gt; -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).Notify(information);
      end;            
    finally
      subscribers.Unlock;
    end;
end;

end.

</code></pre><br><br>
来源:https://www.cnblogs.com/zhuzhongxing/p/14147080.html
頁: [1]
查看完整版本: 【Delphi】Utils.EventBus