代理模式:给某一对象提供代理对象,并由代理对象控制具体对象的引用《GOF设计模式》。
其实,我们一定要仔细理解代理二字,现实生活中,很多这样的例子,包括 如代理商,生产商和使用用户 间 有一个代理商。有人说,这不是多此一举。其实,有一个中介媒介,在具体的对象设计中,是很有弹性的。
一个公共接口,这个公共接口,必须被代理类和实际工作类 实现。就是说,外界只知道到代理类,而不知道实际工作类的存在。而代理类,在实现的公共接口中,是要调用实际工作的方法,就是说,对工作类的一个引用。COM、COM+很多类似这样的实现模式。
现在,简单用Delphi代码进行实现。
unit Proxy;
{代理模式:在实际使用过程中,让下面这两个类实现 每一个公共接口,这样更灵活}
interface
type
{实际业务工作类}
TRemoteBusiness = class
public
function F1: string;
function F2: string;
end;
{代理类}
TProxy = class
private
FRemoteBusinessObj: TRemoteBusiness;
public
function F1: string;
function F2: string;
constructor create;
destructor Destroy; override;
end;
implementation
{ TProxy }
constructor TProxy.create;
begin
FRemoteBusinessObj := TRemoteBusiness.Create;
end;
destructor TProxy.Destroy;
begin
FRemoteBusinessObj.Free;
inherited;
end;
function TProxy.F1: string;
begin
result := FRemoteBusinessObj.F1;
end;
function TProxy.F2: string;
begin
result := FRemoteBusinessObj.F2;
end;
{ TRemoteBusiness }
function TRemoteBusiness.F1: string;
begin
result := 'F1 function is Called';
end;
function TRemoteBusiness.F2: string;
begin
result := 'F2 function is Called';
end;
end.
{调用}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Proxy;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Proxy: TProxy;
begin
Proxy := TProxy.create;
try
Memo1.Lines.Clear;
Memo1.Lines.Add(Proxy.F1);
Memo1.Lines.Add(Proxy.F2);
finally
proxy.Free;
end;
end;
end.
{frm文件}
object Form1: TForm1
Left = 291
Top = 136
Width = 422
Height = 209
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 240
Top = 120
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
object Memo1: TMemo
Left = 16
Top = 16
Width = 297
Height = 89
Lines.Strings = (
'Memo1')
TabOrder = 1
end
end
delphi 代理模式
最新推荐文章于 2023-01-30 21:33:23 发布