Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit MyFramework.Task;
- interface
- type
- TTask = class abstract
- public
- class function GetDescription: string; virtual; abstract;
- end;
- TTaskClass = class of TTask;
- implementation
- end.
- unit MyFramework.TaskFactory;
- interface
- uses
- System.Classes, System.Generics.Collections, MyFramework.Task;
- type
- TTaskFactory = class
- private
- FClassList: TDictionary<string, TTaskClass>;
- public
- constructor Create; virtual;
- destructor Destroy; override;
- procedure GetClassList(Strings: TStrings);
- procedure RegisterClass(TaskClass: TTaskClass);
- end;
- var
- TaskFactory: TTaskFactory;
- implementation
- { TTaskFactory }
- constructor TTaskFactory.Create;
- begin
- FClassList := TDictionary<string, TTaskClass>.Create;
- end;
- destructor TTaskFactory.Destroy;
- begin
- FClassList.Free;
- inherited;
- end;
- procedure TTaskFactory.GetClassList(Strings: TStrings);
- var
- TaskClass: TTaskClass;
- begin
- Strings.Clear;
- Strings.BeginUpdate;
- try
- for TaskClass in FClassList.Values do
- Strings.Add(TaskClass.ClassName + ': ' + TaskClass.GetDescription);
- finally
- Strings.EndUpdate;
- end;
- end;
- procedure TTaskFactory.RegisterClass(TaskClass: TTaskClass);
- begin
- FClassList.Add(TaskClass.ClassName, TaskClass);
- end;
- initialization
- TaskFactory := TTaskFactory.Create;
- finalization
- TaskFactory.Free;
- end.
- unit MyFramework.SpecificTask;
- interface
- uses
- MyFramework.TaskFactory, MyFramework.Task;
- type
- TMySpecificTask = class(TTask)
- public
- class function GetDescription: string; override;
- end;
- implementation
- { TMyTask }
- class function TMySpecificTask.GetDescription: string;
- begin
- Result := 'This is the description';
- end;
- initialization
- TaskFactory.RegisterClass(TMySpecificTask);
- end.
- unit MyApp.UnitMain;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, MyFramework.TaskFactory;
- type
- TForm1 = class(TForm)
- ListBox1: TListBox;
- procedure FormCreate(Sender: TObject);
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- TaskFactory.GetClassList(ListBox1.Items);
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement