当前位置: 首页 > 图文教程 > 开发语言 > Delphi > Delphi中的Wrapper设计模式

Delphi
Action 造成cpu占用过多的奇怪问题
教你如何用Delphi生成GBK码表
Delphi7的WebService与数据库
Delphi实用代码:自绘XP风格菜单
用AdoDataSet实现数据表的导入导出
和md5.asp结果一样的Delphi加密代码
用Delphi制作中国式报表
将12345678.99转换成12,345,678.99
用Delphi编程时如何利用线程
资源文件在DELPHI中的使用
属性和控件编辑器
Delphi中TApplication类的巧用
具有不同字体的列表框
Delphi中易混淆的概念
在Delphi中巧改窗体文件实现控件数组化
Delphi 中自做动态显示的控件
利用Delphi编程发送E-mail
Delphi中怎样监视POP3信箱
DELPHI和注册表
Delphi参考手册

Delphi中的Wrapper设计模式


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 45 ::
收藏到网摘: n/a

  Wrapper设计模式能够把一个类的接口修改成另一个类所需要的接口,然后让本来因为接口不兼容的类能够在一起配合工作。

  在Delphi中,为了让两个类能够支持同样的接口,它们必须有同样的祖先类这样才能在其他类调用的时候实现多态性。但是有的时候我们希望两个没有关系的类能够在一起工作,Wrapper设计模式就能够让一个类wrap部分另一个类的部分接口(当然也可以是全部,看具体的需要而定),从而能够模拟出一个类似于“uses”的类的多继承关系。

  让我们来看一个例子,有一个类TSimple从TObject继承下来,但是我们希望能把TSimple这个类放到Delphi的控件面板(component palette)上,然而我们知道,如果一个类能够放置到控件面板上,这个类必须从TComponent派生下来。现在我们不想在改变TSimple的祖先类TObject的情况下(比如我们并没有TSimple的源代码)把TSimple放到控件面板上,我们可以构建一个继承自TComponent的TSimpleWapper类,在TSimpleWapper类中Wrap TSimple的接口。下面是这个例子的范例代码:

type
 TSample = class (TObject)
private
 FSomeValue: Integer;
public
 function SomeAction(const Data: string): Boolean;
  property SomeValue: Integer read FSomeValue write FSomeValue;
 end;
 TSampleWrapper = class(TComponent)
private
 FSample: TSample;
public
 property Sample: TSample read FSample;
end;

  然后我们就可以在TSample类中实现TSample的接口了,代码如下:

TSampleWrapper = class (TComponent)
private
FSample: TSample;
protected
function GetSomeValue: Integer;
procedure SetSomeValue(Value: Integer);
public
function SomeAction(const Data: string): Boolean;
property Sample: TSample read FSample;
property SomeValue: Integer read GetSomeValue write SetSomeValue;

  接口实现代码如下:

function TSampleWrapper.GetSomeValue: Integer;
begin
Result := Sample.SomeValue;
end;
procedure TSampleWrapper.SetSomeValue(Value: Integer);
begin
Sample.SomeValue := Value;
end;
function TSampleWrapper.SomeAction(const Data: string): Boolean;
begin
Result := Sample.SomeAction(Data);
end;