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

浅析JavaScript设计模式——代理模式

代理模式 为一个对象提供一个代用品或占位符,以便控制对它的访问 好久没有写设计模式的文章了 今天要写的代理模式可能内容要多一些 代理模式非常有用,代理模式也分为很多很多种,我只谈一些常见并且...
  • q1056843325
  • q1056843325
  • 2016年11月17日 20:33
  • 1019

谈谈JAVA的代理模式认识 一——为什么使用代理模式

一、中介隔离作用     代理模式,第一次接触它,是在学习.Net的时候看的一本书,叫做《大话设计模式》,至今已快三年了。相信看过这本书的同学们,都记得书中的代理模式,就是为他人做嫁衣裳的故事。好,我...
  • wangyongxia921
  • wangyongxia921
  • 2015年05月28日 16:24
  • 21853

Android设计模式之代理模式 Proxy

一.概述 代理模式也是平时比较常用的设计模式之一,代理模式其实就是提供了一个新的对象,实现了对真实对象的操作,或成为真实对象的替身.在日常生活中也是很常见的.例如A要租房,为了省麻烦A...
  • l2show
  • l2show
  • 2015年07月28日 22:14
  • 20601

状态模式--策略模式--代理模式

状态模式:意图:   允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。适用性:   在下面的两种情况下均可使用 S t a t e模式:   • 一个对象的行为取决于它的...
  • lonewolf521125
  • lonewolf521125
  • 2015年05月19日 11:43
  • 903

代理模式的简单例子

【代理模式应用场景举例】比如在玩“极品飞车”这款游戏,如果游戏者手中的金钱达到了一定的数量就可以到车店买一部性能更高的赛车,那么这个卖车的“车店”就是一个典型的“汽车厂家”的“代理”,他为汽车厂家“提...
  • lishaojun0115
  • lishaojun0115
  • 2016年02月26日 11:51
  • 1673

代理模式使用场合与注意事项

代理 模式的定义:      为其它对象提供一种代理以控制这个对象的访问--《设计模式》GOF 注意事项: 1. 接口并不是必须的,大多数情况下,我们为了保持对对象操作的透明性,并强制实现类实现代理类...
  • dzta831121
  • dzta831121
  • 2015年11月17日 16:50
  • 615

如何解决代理模式详解的原理详解

我特意将本系列改了下名字,原名是《设计模式学习之路》,原因是因为之前写过一篇《spring源码学习之路》,但是我感觉本次写二十三种设计模式,更多的还是分享给各位自己的理解,所以感觉学习之路有点不合适,...
  • t93z5uusca
  • t93z5uusca
  • 2017年05月10日 03:38
  • 382

Java设计模式——代理模式实现及原理

简介 Java编程的目标是实现现实不能完成的,优化现实能够完成的,是一种虚拟技术。生活中的方方面面都可以虚拟到代码中。代理模式所讲的就是现实生活中的这么一个概念:中介。 代理模式的定义:给某一个对象提...
  • Goskalrie
  • Goskalrie
  • 2016年09月07日 13:43
  • 21256

【学习笔记javascript设计模式与开发实践(代理模式)----6】

第6章代理模式  代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。 代理模式是一种非常有意义的模式,在生活中可以找到很多代理模式的场景。比如明星都有经济人作为代理。如果想请明星来办一场...
  • pigpigpig4587
  • pigpigpig4587
  • 2015年12月16日 17:07
  • 1115

代理模式的java实现例子

代理模式:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。...
  • pnjlc
  • pnjlc
  • 2016年09月30日 11:37
  • 919
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:delphi 代理模式
举报原因:
原因补充:

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