zoukankan      html  css  js  c++  java
  • 【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.
    
    
  • 相关阅读:
    USACO07FEB银牛派对
    求环总结
    NOIP2015信息传递(拓扑排序 / 并查集)
    APIO2012dispatching (左偏树)
    [编程题]山寨金闪闪 (面试题)
    【小米oj】简单直接全排列
    【小米oj】寻找归一数字
    【小米oj】dreamstart 的催促
    【小米oj】打羽毛球的小爱同学
    【小米oj】石头收藏家
  • 原文地址:https://www.cnblogs.com/zhuzhongxing/p/14147080.html
Copyright © 2011-2022 走看看