当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 用Delphi实现动态代理(1):概述 [Mental Studio]猛禽[Blog] 一、问题 所谓动态代理(Dynamic Proxy),要先从GoF的Proxy模式说起。
 

 

    摘要: 一个设计优良的试题库系统,除了支持文本数据以外,还应该支持公式、图片、表格等非文本数据,这样才能很好地支持已有的试题形式。笔者前一阵子使用过一个“xxx考核题库系统”,该软件使用paradox作为数据库,只能支持文本题目,无法满足现实试题的要求,为此对其进行了更改。 对于非文本数据的支持可以采用ole嵌入word文档的方法,但这种技术实现起来比较复杂,本文给出一种简单而实......
    摘要:由于看到前些日子retina里有个不需要预先知道帐号就可以获取一般任意 目标nt主机帐号的功能。几个月之前,我为了弄清原理,就做了一个工具。 这次整理硬盘,发现了这个小工具,这本身并不算什么,因为iss scanner等 软件都包含了这类功能。但是我希望大家能够通过这个例子,了解一些nt的 api和安全性知识。 -- 完整的code(use delphi)和一个编译好的zip文件在 ftp......


用Delphi实现动态代理(1):概述
用delphi实现动态代理(1):概述

一.问题 【程序编程相关:用Delphi编写自己的可视化控件

[mental studio]猛禽[blog] 【推荐阅读:保存页面为MHT的代码

假设有一个ifoo接口: 【扩展信息:COM 中的服务器和对象(翻译)

所谓动态代理(dynamic proxy),要先从gof的proxy模式说起.

{$m+}

ifoo = interface( iinterface )

[{3a85e46d-f3d4-4d9c-a06c-4e7c1bac9361}]

function dosth( dummy : integer ) : string; stdcall;

procedure bar; stdcall;

end;

{$m-}

接口提供者对其作了实现,并提供了一个工厂方法(factory method)来向用户提供了实例的创建,如下:

tfooimpl = class(tinterfacedobject, ifoo)

protected

function dosth( dummy : integer ) : string; stdcall;

procedure bar; stdcall;

end;

(*

tfooimpl的实现代码,略

*)

// 创建实例的工厂方法

function getfooobject( ) : ifoo;

begin

result := tfooimpl.create as ifoo;

end;

作为这个接口的用户,只有ifoo接口的定义,并且可以一个创建的实现ifoo接口的实例,但没有实现类tfooimpl的定义与实现代码.如果现在用户需要为ifoo.dosth增加事务功能(假设dosth被实现为对数据库作更新操作),要怎么办?

 

二.静态代理解决方案

gof的proxy模式就是解决方案之一:

如图所示,首先要定义一个新的ifoo接口实现--tstaticproxy.其中用了一个属性fimpl记录了tfooimpl的实例.然后在 tstaticproxy中实现dosth与bar,并且将不需要变更的bar函数直接委托给fimpl处理,而在dosth的实现里加入事务处理即可. tstaticproxy的代码大致如下:

tstaticproxy = class(tinterfacedobject, ifoo)

private

fimpl : ifoo;

protected

function dosth( dummy : integer ) : string; stdcall;

procedure bar; stdcall;

public


...   下一页
 ·getpartfilter+sumstocklist     »显示摘要«
    摘要:sql.text:= insert into rep仓库收付存月结报表(mc,ycjcje,bqsrje,bqllje,qmjcje) + (select sorttype,sum(qc*inprice),sum((rk-rkt)*inprice),sum((ck-ckt)*inprice),sum(jc*inprice) + from tmpkk2 where 1=1 +sdepot+stmp......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE