delphi 代理模式

转载 2012年03月22日 09:54:34
代理模式:给某一对象提供代理对象,并由代理对象控制具体对象的引用《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

相关文章推荐

Java中三种代理模式源码+文档

  • 2017年11月01日 09:58
  • 1.11MB
  • 下载

java代理模式

  • 2014年05月20日 09:40
  • 59KB
  • 下载

Spring中的代理模式

代理模式 所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 代...

代理模式小案例

  • 2017年07月26日 15:24
  • 4KB
  • 下载

使用自动生成java文件和自动编译的动态代理模式

/* * 接口中有几个方法,那么使用反射的getMethods()就会有几个方法名 * 因为接口是不会继承Object的 */ public interface Moveable { void...

java中的三种代理模式

  • 2017年05月03日 19:35
  • 7.39MB
  • 下载

代理模式Demo

  • 2017年05月31日 15:03
  • 22.37MB
  • 下载

ios代理模式深入了解一下

首先代理的基本使用我就不说了,今天主要说一下代理的一些特殊情况1.我们一般调用代理方法有两个 if ([self.delegate respondsToSelector:@selector(vc...

Java 静态代理模式

  • 2017年07月02日 19:40
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:delphi 代理模式
举报原因:
原因补充:

(最多只允许输入30个字)