码迷,mamicode.com
首页 > Windows程序 > 详细

Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---观察者模式之WeatherReport[转]

时间:2014-11-05 16:17:34      阅读:315      评论:0      收藏:0      [点我收藏+]

标签:des   blog   http   io   ar   os   for   sp   div   

bubuko.com,布布扣
  1bubuko.com,布布扣
  2bubuko.com,布布扣{《HeadFirst设计模式》之观察者模式 }
  3bubuko.com,布布扣{ 主题与观察者                    }
  4bubuko.com,布布扣{ 编译工具 :Delphi7.0            }
  5bubuko.com,布布扣{ 联系方式 :guzh-0417@163.com    }
  6bubuko.com,布布扣
  7bubuko.com,布布扣unit uWeatherReport;
  8bubuko.com,布布扣
  9bubuko.com,布布扣interface
 10bubuko.com,布布扣
 11bubuko.com,布布扣uses
 12bubuko.com,布布扣  Classes, SysUtils;
 13bubuko.com,布布扣
 14bubuko.com,布布扣type
 15bubuko.com,布布扣  TObserver = class; { Forward声明,创建两个相互依赖的类 }
 16bubuko.com,布布扣  
 17bubuko.com,布布扣  { 抽象主题 }
 18bubuko.com,布布扣  TSubject = class(TObject)
 19bubuko.com,布布扣    procedure RegisterObserver(aObserver: TObserver); virtual; abstract;
 20bubuko.com,布布扣    procedure RemoveObserver  (aObserver: TObserver); virtual; abstract;
 21bubuko.com,布布扣    procedure NotifyObserver; virtual; abstract;
 22bubuko.com,布布扣  end;
 23bubuko.com,布布扣
 24bubuko.com,布布扣  { 具体主题 }
 25bubuko.com,布布扣  TWeatherData = class(TSubject)
 26bubuko.com,布布扣  private
 27bubuko.com,布布扣    FObservers: TList;
 28bubuko.com,布布扣    FTemp     : Integer;
 29bubuko.com,布布扣    FHumidity : Integer;
 30bubuko.com,布布扣    FPresssure: Integer;
 31bubuko.com,布布扣  public
 32bubuko.com,布布扣    constructor Create;
 33bubuko.com,布布扣    destructor Destroy; override;
 34bubuko.com,布布扣    procedure RegisterObserver(aObserver: TObserver); override;
 35bubuko.com,布布扣    procedure RemoveObserver  (aObserver: TObserver); override;
 36bubuko.com,布布扣    procedure NotifyObserver; override;
 37bubuko.com,布布扣    procedure MeasurementsChanged;
 38bubuko.com,布布扣    procedure SetMeasurements(aTemp, aHumidity, aPresssure: Integer);
 39bubuko.com,布布扣  end;
 40bubuko.com,布布扣
 41bubuko.com,布布扣  {**************************************************************************}
 42bubuko.com,布布扣
 43bubuko.com,布布扣  { 抽象观察者 }
 44bubuko.com,布布扣  TObserver = class(TObject)
 45bubuko.com,布布扣    procedure UpDate(Temp, Humidity, Presssure: Integer); virtual; abstract;
 46bubuko.com,布布扣    procedure Display; virtual; abstract;
 47bubuko.com,布布扣  end;
 48bubuko.com,布布扣
 49bubuko.com,布布扣  { 具体观察者 }
 50bubuko.com,布布扣  TCurrentConditionsDisplay = class(TObserver)
 51bubuko.com,布布扣  private
 52bubuko.com,布布扣    FTemp       : Integer;
 53bubuko.com,布布扣    FHumidity   : Integer;
 54bubuko.com,布布扣    FWeatherData: TSubject;
 55bubuko.com,布布扣  public
 56bubuko.com,布布扣    constructor Create(aWeatherData: TSubject);
 57bubuko.com,布布扣    destructor Destroy; override;
 58bubuko.com,布布扣    procedure UpDate(aTemp, aHumidity, aPresssure: Integer); override;
 59bubuko.com,布布扣    procedure Display; override;
 60bubuko.com,布布扣  end;
 61bubuko.com,布布扣
 62bubuko.com,布布扣implementation
 63bubuko.com,布布扣
 64bubuko.com,布布扣{ TWeatherData }
 65bubuko.com,布布扣
 66bubuko.com,布布扣constructor TWeatherData.Create;
 67bubuko.com,布布扣begin
 68bubuko.com,布布扣  FObservers := TList.Create;
 69bubuko.com,布布扣end;
 70bubuko.com,布布扣
 71bubuko.com,布布扣destructor TWeatherData.Destroy;
 72bubuko.com,布布扣begin
 73bubuko.com,布布扣  FObservers.Clear;
 74bubuko.com,布布扣  FreeAndNil(FObservers);
 75bubuko.com,布布扣  inherited Destroy;
 76bubuko.com,布布扣end;
 77bubuko.com,布布扣
 78bubuko.com,布布扣procedure TWeatherData.MeasurementsChanged;
 79bubuko.com,布布扣begin
 80bubuko.com,布布扣  NotifyObserver;
 81bubuko.com,布布扣end;
 82bubuko.com,布布扣
 83bubuko.com,布布扣procedure TWeatherData.NotifyObserver;
 84bubuko.com,布布扣var
 85bubuko.com,布布扣  i: Integer;
 86bubuko.com,布布扣  aObserver: TObserver;
 87bubuko.com,布布扣begin
 88bubuko.com,布布扣  for i := 0 to FObservers.Count - 1 do
 89bubuko.com,布布扣  begin
 90bubuko.com,布布扣    aObserver := TObserver(FObservers.Items[i]);
 91bubuko.com,布布扣    aObserver.UpDate(FTemp, FHumidity, FPresssure);
 92bubuko.com,布布扣  end;
 93bubuko.com,布布扣end;
 94bubuko.com,布布扣
 95bubuko.com,布布扣procedure TWeatherData.RegisterObserver(aObserver: TObserver);
 96bubuko.com,布布扣begin
 97bubuko.com,布布扣  FObservers.Add(aObserver);
 98bubuko.com,布布扣end;
 99bubuko.com,布布扣
100bubuko.com,布布扣procedure TWeatherData.RemoveObserver(aObserver: TObserver);
101bubuko.com,布布扣var
102bubuko.com,布布扣  i: Integer;
103bubuko.com,布布扣begin
104bubuko.com,布布扣  i := FObservers.IndexOf(aObserver);
105bubuko.com,布布扣  if (i >= 0) then
106bubuko.com,布布扣    FObservers.Remove(aObserver);
107bubuko.com,布布扣end;
108bubuko.com,布布扣
109bubuko.com,布布扣procedure TWeatherData.SetMeasurements(aTemp, aHumidity, aPresssure: Integer);
110bubuko.com,布布扣begin
111bubuko.com,布布扣  FTemp      := aTemp;
112bubuko.com,布布扣  FHumidity  := aHumidity;
113bubuko.com,布布扣  FPresssure := aPresssure;
114bubuko.com,布布扣  MeasurementsChanged;
115bubuko.com,布布扣end;
116bubuko.com,布布扣
117bubuko.com,布布扣{ TCurrentConditionsDisplay }
118bubuko.com,布布扣
119bubuko.com,布布扣constructor TCurrentConditionsDisplay.Create(aWeatherData: TSubject);
120bubuko.com,布布扣begin
121bubuko.com,布布扣  FWeatherData := aWeatherData;
122bubuko.com,布布扣  aWeatherData.RegisterObserver(Self);
123bubuko.com,布布扣end;
124bubuko.com,布布扣
125bubuko.com,布布扣destructor TCurrentConditionsDisplay.Destroy;
126bubuko.com,布布扣begin
127bubuko.com,布布扣  inherited Destroy;
128bubuko.com,布布扣end;
129bubuko.com,布布扣
130bubuko.com,布布扣procedure TCurrentConditionsDisplay.Display;
131bubuko.com,布布扣begin
132bubuko.com,布布扣  Writeln(‘Current Conditions: ‘, FTemp, ‘ degrees and ‘,
133bubuko.com,布布扣          FHumidity, ‘% humidity.‘);
134bubuko.com,布布扣end;
135bubuko.com,布布扣
136bubuko.com,布布扣procedure TCurrentConditionsDisplay.UpDate(aTemp, aHumidity,
137bubuko.com,布布扣                                           aPresssure: Integer);
138bubuko.com,布布扣begin
139bubuko.com,布布扣  FTemp     := aTemp;
140bubuko.com,布布扣  FHumidity := aHumidity;
141bubuko.com,布布扣  Display;
142bubuko.com,布布扣end;
143bubuko.com,布布扣
144bubuko.com,布布扣end.

    

bubuko.com,布布扣
 1bubuko.com,布布扣
 2bubuko.com,布布扣{《HeadFirst设计模式》之观察者模式 }
 3bubuko.com,布布扣{ 客户端                         }
 4bubuko.com,布布扣{ 编译工具 :Delphi7.0            }
 5bubuko.com,布布扣{ 联系方式 :guzh-0417@163.com    }
 6bubuko.com,布布扣
 7bubuko.com,布布扣program pWeatherReport;
 8bubuko.com,布布扣
 9bubuko.com,布布扣{$APPTYPE CONSOLE}
10bubuko.com,布布扣
11bubuko.com,布布扣uses
12bubuko.com,布布扣  SysUtils,
13bubuko.com,布布扣  uWeatherReport in ‘uWeatherReport.pas‘;
14bubuko.com,布布扣
15bubuko.com,布布扣var
16bubuko.com,布布扣  aWeatherData: TWeatherData;
17bubuko.com,布布扣  aCurrentConditionsDisplay: TCurrentConditionsDisplay;
18bubuko.com,布布扣  
19bubuko.com,布布扣begin
20bubuko.com,布布扣  aWeatherData := TWeatherData.Create;
21bubuko.com,布布扣  aCurrentConditionsDisplay := TCurrentConditionsDisplay.Create(aWeatherData);
22bubuko.com,布布扣
23bubuko.com,布布扣  aWeatherData.SetMeasurements(80, 65, 30);
24bubuko.com,布布扣
25bubuko.com,布布扣  FreeAndNil(aWeatherData);
26bubuko.com,布布扣  FreeAndNil(aCurrentConditionsDisplay);
27bubuko.com,布布扣
28bubuko.com,布布扣  Readln;
29bubuko.com,布布扣end.

 

运行结果:

bubuko.com,布布扣

 

 
 

Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---观察者模式之WeatherReport[转]

标签:des   blog   http   io   ar   os   for   sp   div   

原文地址:http://www.cnblogs.com/0x2D-0x22/p/4076323.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!