MM的decorator模式生成的代码,为什么property与field这么奇怪?(100分)

  • 主题发起人 主题发起人 xzh2000
  • 开始时间 开始时间
X

xzh2000

Unregistered / Unconfirmed
GUEST, unregistred user!
大家帮我看看为什么TextStream属性与FTextStream的实现
代码,为什么这么难理解哦?

unit decorator;

interface

uses
SysUtils, Windows, Messages, Classes, Graphics, Controls,
Forms, Dialogs;

type
TTextStream = class (TObject)
private
function GetEndOfText: Boolean
virtual
abstract;
public
function ReadLine: string
virtual
abstract;
procedure WriteLine(const Value: String)
virtual
abstract;
property EndOfText: Boolean read GetEndOfText;
end;

TTextFilter = class (TTextStream)
private
FOwnsTextStream: Boolean;
FTextStream: TTextStream
{注意这个。。。。。。}
function GetTextStream: TTextStream;
procedure SetTextStream(Value: TTextStream);
public
constructor Create(ATextStream: TTextStream
AOwnsTextStream: Boolean);
destructor Destroy
override;
property OwnsTextStream: Boolean read FOwnsTextStream write FOwnsTextStream;
property TextStream: TTextStream read GetTextStream write SetTextStream;
{注意这个。。。。。。}
end;


implementation

{
********************************* TTextFilter **********************************
}
constructor TTextFilter.Create(ATextStream: TTextStream
AOwnsTextStream:
Boolean);
begin
inherited Create;
TextStream := ATextStream
{注意这个。。。。。。}
OwnsTextStream := AOwnsTextStream;
end;

destructor TTextFilter.Destroy;
begin
TextStream := nil;
inherited Destroy;
end;

function TTextFilter.GetTextStream: TTextStream;
begin
Result := FTextStream;
end;

procedure TTextFilter.SetTextStream(Value: TTextStream);
begin
if Value <> FTextStream then
begin
if OwnsTextStream then FTextStream.Free;
FTextStream := Value
{注意这个。。。。。。}
end;
end;


end.

为什么TextStream与FTextStream一点关系都没有哦?
 
这段代码很正常呀,也符合逻辑,漂亮
既然是对象内部它也用了public的属性,而不是直接访问private的
这样读写属性不管是外部还是自己调用都要通过Get及Set方法
 
谢谢,我终于看明白啦。
 
抱歉,我实是看不懂,我也不知道 MM 是什么。[:(]
先存起来,以后学了设计模式再看。
 
后退
顶部