打印本文 打印本文 关闭窗口 关闭窗口
设计模式、用Delphi实现----Decorator 模式
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2223  更新时间:2009/4/23 18:40:58  文章录入:mintao  责任编辑:mintao
    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]  下一页

打印本文 打印本文 关闭窗口 关闭窗口