《GOF设计模式》—代理(PROXY)—Delphi源码示例:代理接口

本文介绍代理模式的基本概念,通过示例代码展示了如何实现该模式。代理模式允许程序员在不直接引用对象的情况下操作对象,有助于控制对对象的访问并实现职责分离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

示例:代理接口

说明:

1)、定义

为其他对象提供一种代理以控制对这个对象的访问。

2)、结构

这是运行时刻一种可能的代理结构的对象图。

 

 

对象:

Subject:定义RealSubjectProxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy

RealSubject:定义Proxy所代表的实体。

代理:

Proxy:保存一个引用使得代理可以访问实体。若RealSubjectSubject的接口相同,Proxy会引用Subject。提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体。控制对实体的存取,并可能负责创建和删除它。

其他功能依赖于代理的类型:

.Remote Proxy负责对请求及其参数进行编码,并向不同地址空间中的实体发送已编码的请求。

.Virtual Proxy可以缓存实体的附加信息,以便延迟对它的访问。例如,动机一节中提到的ImageProxy缓存了图像实体的尺寸。

.Protection Proxy检查调用者是否具有实现一个请求所必需的访问权限。

代码:

unit uProxy;

 

interface

 

uses

    Dialogs;

 

type

    TSubject = class

    public

        procedure Request; virtual; abstract;

    end;

    TRealSubject = class(TSubject)

    public

        procedure Request; override;

    end;

    TProxy = class(TSubject)

    private

        FSubject: TSubject;

    public

        constructor Create;

        destructor Destroy; override;

        //---

        procedure Request; override;

    end;

 

implementation

 

procedure TRealSubject.Request;

begin

    ShowMessage('RealSubject');

end;

 

constructor TProxy.Create;

begin

    FSubject := nil;

end;

 

destructor TProxy.Destroy;

begin

    if assigned(FSubject) then

        FSubject.Free;

    //---

    inherited;

end;

 

procedure TProxy.Request;

begin

    if not assigned(FSubject) then

        FSubject := TRealSubject.Create;

    //---

    FSubject.Request;

end;

 

end.

 

procedure TForm1.Button1Click(Sender: TObject);

var

    ASubject: TSubject;

begin

    ASubject := TProxy.Create;

    ASubject.Request;

    ASubject.Free;

end;

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值