程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi中的Wrapper設計模式

Delphi中的Wrapper設計模式

編輯:Delphi

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;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved