function GetTextStream: TTextStream;
procedure SetTextStream(Value: TTextStream);
public
constructor Create(ATextStream: TTextStream; AOwnsStream: Boolean);
destructor Destroy; override;
function ReadLine: string; override;
procedure WriteLine(const Line: string); override;
property OwnsStream: Boolean read FOwnsStream write FOwnsStream;
property TextStream: TTextStream read GetTextStream write SetTextStream;
end;
代码说明:
· 属性TextStream包含了对装饰的文本流对象的引用。TextStream具有读、写的操作。这样对后代来说就更灵活了。一个类似的模式的proxy模式,通过读、写方法在proxy模式也是一种好的应用。有关proxy模式请参考《设计模式》。
· 属性OwnsStream用来TextStream的所有权。在下面的实现代码中你可以看到TtextFilter类在free它所有的文本流时先判断OwnsStream是否为真。它取到帮助装饰清除的作用。
· TextStream、OwnsStream是装饰类的构造器的两个参数。
· 实现装饰类重载了ReadLine、WriteLine、GetEndOfText三个方法。并加入了实现。
下面是它的实现部分代码:
constructor TTextFilter.Create(ATextStream: TTextStream; AOwnsStream: Boolean);
begin
inherited Create;
TextStream := ATextStream;
OwnsStream := AOwnsStream;
end;
destructor TTextFilter.Destroy;
begin
TextStream := nil;
inherited Destroy;
end;
function TTextFilter.GetEndOfText: Boolean;
begin
Result := TextStream.GetEndOfText;
end;
function TTextFilter.GetTextStream: TTextStream;
begin
Result := FTextStream;
end;
function TTextFilter.ReadLine: string;
begin
Result := TextStream.ReadLine;
end;
procedure TTextFilter.SetTextStream(Value: TTextStream);
begin
if Value <> FTextStream then
begin
if OwnsTextStream then FTextStream.Free;
FTextStream := Value;
end;
end;
procedure TTextFilter.WriteLine(const Line: string);
begin
上一页 [1] [2] [3] 下一页 [系统软件]InstallShield Express for delphi制作安装程序定… [常用软件]InstallShield Express制作Delphi数据库安装程序 [Delphi程序]为什么选择Delphi.Net ? [Delphi程序]《关于VisiBroker For Delphi的使用》(4) [Delphi程序]Delphi 程序员代码编写标准指南 [Delphi程序]转贴:Conversion to Delphi 6: Missing unit Pro… [Delphi程序]Borland Delphi 9 的新特性 [Delphi程序]Delphi 键盘码表 [Delphi程序]Chuck Jazdzewski的离开意味着Delphi的终结吗? [Delphi程序]Delphi Access violations 问题的解决之道
|