Advertisement
TLama

Untitled

Apr 17th, 2015
400
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.31 KB | None | 0 0
  1. unit MyFramework.Task;
  2.  
  3. interface
  4.  
  5. type
  6.   TTask = class abstract
  7.   public
  8.     class function GetDescription: string; virtual; abstract;
  9.   end;
  10.   TTaskClass = class of TTask;
  11.  
  12. implementation
  13.  
  14. end.
  15.  
  16.  
  17.  
  18. unit MyFramework.TaskFactory;
  19.  
  20. interface
  21.  
  22. uses
  23.   System.Classes, System.Generics.Collections, MyFramework.Task;
  24.  
  25. type
  26.   TTaskFactory = class
  27.   private
  28.     FClassList: TDictionary<string, TTaskClass>;
  29.   public
  30.     constructor Create; virtual;
  31.     destructor Destroy; override;
  32.     procedure GetClassList(Strings: TStrings);
  33.     procedure RegisterClass(TaskClass: TTaskClass);
  34.   end;
  35.  
  36. var
  37.   TaskFactory: TTaskFactory;
  38.  
  39. implementation
  40.  
  41. { TTaskFactory }
  42.  
  43. constructor TTaskFactory.Create;
  44. begin
  45.   FClassList := TDictionary<string, TTaskClass>.Create;
  46. end;
  47.  
  48. destructor TTaskFactory.Destroy;
  49. begin
  50.   FClassList.Free;
  51.   inherited;
  52. end;
  53.  
  54. procedure TTaskFactory.GetClassList(Strings: TStrings);
  55. var
  56.   TaskClass: TTaskClass;
  57. begin
  58.   Strings.Clear;
  59.   Strings.BeginUpdate;
  60.   try
  61.     for TaskClass in FClassList.Values do
  62.       Strings.Add(TaskClass.ClassName + ': ' + TaskClass.GetDescription);
  63.   finally
  64.     Strings.EndUpdate;
  65.   end;
  66. end;
  67.  
  68. procedure TTaskFactory.RegisterClass(TaskClass: TTaskClass);
  69. begin
  70.   FClassList.Add(TaskClass.ClassName, TaskClass);
  71. end;
  72.  
  73. initialization
  74.   TaskFactory := TTaskFactory.Create;
  75. finalization
  76.   TaskFactory.Free;
  77.  
  78. end.
  79.  
  80.  
  81.  
  82. unit MyFramework.SpecificTask;
  83.  
  84. interface
  85.  
  86. uses
  87.   MyFramework.TaskFactory, MyFramework.Task;
  88.  
  89. type
  90.   TMySpecificTask = class(TTask)
  91.   public
  92.     class function GetDescription: string; override;
  93.   end;
  94.  
  95. implementation
  96.  
  97. { TMyTask }
  98.  
  99. class function TMySpecificTask.GetDescription: string;
  100. begin
  101.   Result := 'This is the description';
  102. end;
  103.  
  104. initialization
  105.   TaskFactory.RegisterClass(TMySpecificTask);
  106.  
  107. end.
  108.  
  109.  
  110.  
  111. unit MyApp.UnitMain;
  112.  
  113. interface
  114.  
  115. uses
  116.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  117.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, MyFramework.TaskFactory;
  118.  
  119. type
  120.   TForm1 = class(TForm)
  121.     ListBox1: TListBox;
  122.     procedure FormCreate(Sender: TObject);
  123.   end;
  124.  
  125. var
  126.   Form1: TForm1;
  127.  
  128. implementation
  129.  
  130. {$R *.dfm}
  131.  
  132. procedure TForm1.FormCreate(Sender: TObject);
  133. begin
  134.   TaskFactory.GetClassList(ListBox1.Items);
  135. end;
  136.  
  137. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement