Я хотел бы создать общий предметный интерфейс и повторно использовать его с «специфическими» классами Observer.Поэтому я попробовал этот код для субъекта:
unit uISubject;
interface
type
ISubject = interface(IInterface)
procedure RegisterObserver(Observer: IInterface);
procedure RemoveObserver(Observer: IInterface);
procedure NotifyObservers;
end;
implementation
end.
И у меня есть следующие классы для наблюдателей:
Наблюдатель для последовательной связи
unit uISerialObserver;
interface
type
ISerialObserver = interface(IInterface)
['{EF833BD7-31C1-49B3-8041-F1574AC043F0}']
procedure DataAvailable(ReceivedData: AnsiString);
end;
implementation
end.
Наблюдатель, которыйобновить индикатор выполнения
unit uIProgressObserver;
interface
type
IProgressObserver = interface(IInterface)
['{05AC7C76-CD41-42AB-B793-1512E68D91D5}']
procedure UpdateProgressParameters(Min, Max: Cardinal);
procedure IncrementParameter;
end;
implementation
end.
И я реализовал метод Notify следующим образом:
procedure TSerialPortCommunicator.NotifyObservers;
var
Obs: IInterface;
begin
for Obs in FObservers do
begin
ISerialObserver(Obs).UpdateObserver(FReceivedData);
end;
end;
, где
FObservers: TList<IInterface>;
Когда NotifyObservers
выполняется, Delphi возвращаетошибка нарушения прав доступа.
Я хотел бы знать, что я делаю неправильно?