设计模式、用Delphi实现---->Wrapper pattern

delphi设计模式示例 delphi设计模式示例delphi设计模式示例delphi设计模式示例 立即下载

Wrapper pattern

起源

Delphi中的Wrapper模式是在 ‘Adapter’ or ‘Wrapper’ 的基础上上改造的。更多的介绍请查阅[Gam+, pages 139..150]。

目的

 

‘将一个接口转换成客户期待的别外一个接口。Wrappers 模式使得原本由于接口不兼容而不能一起工作类可以一起工作,参阅 [Gam+ 139].

动机

在Delphi的Object Pascal语言中类对多态性的支持远比接口对多态的支持高。同样意味着两个类虽然可以同时支持一个接口,但它们必须有相同的组先类,从而客户对象可以对类执行动态变换。但有时我们想使一些原本无关的类在一起工作,此时wrapper模式让你将一类包装成另一个类的接口。它类同于多重继承,但在Delphi是一种引用关系。

开始讲述下面的例了,好:

假设您有一个继承自Tobject并想安装到控件板的类:Tsample,但此时必须让组件支持Tcomponent。高兴的是有一种好的办法不用改变Tsample的继承关系就可以将转换成支持

Tcomponent(比如此时你没有类的源码,只有它的BPL包),创建一个继承于Tcomponent的新类TsampleWrapper,并将引用聚合类Tsample。此后类TsampleWrapper将是Tcomponent后代,你可以将它加入控件板了。你现在将Tsample包装成TsampleWrapper的一个成员变量,并为它接供一个专用的访问接口。TsampleWrapper将被委托接受它包装的类的所有行为。这样客户就可能适当的调用Sample的方法及Sample的属性。

另外一种方法使用wrapper pattern关有符合‘Law of Demeter’。些规律的基础是让你不要引用太深的对象。Tsample的访问接口和TsampleWrapper的关系如下:

type

  TSample = class (TObject)

  private

    FSomeValue: Integer;

  public

    function SomeAction(const Data: string): Boolean;

    property SomeValue: Integer read FSomeValue write FSomeValue;

  end;

 

  TSampleWrapper = class (TComponent)

  private

    FSample: TSample;

  public

    property Sample: TSample read FSample;

  end;

依照‘Demeter’s law’访问SampleWrapper.Sample是很好的。但SampleWrapper.Sample.SomeAction却不是好的实例。好的想法是在类TsampleWrapper中定义一个SomeAction方法,并通过SomeAction调度Sample.SomeAction方法。

你可能经常写过这样的代码:ListBox.Canvas.Brush.Color。 看起来有点违背 ‘Demeter’s law’

应用

上面描述的类演示了一个wrapper模式的应用。类TsampleWrapper聚合Tsample类,并接供了一个Sample的属性接口。现在我们创建一个更完整的wrapped模式的应用,为类TSampleWrapper创建一个叫SomeAction和一个叫SomeValue属性接口,

 

TSampleWrapper = class (TComponent)

  private

    FSample: TSample;

  protected

    function GetSomeValue: Integer;

    procedure SetSomeValue(Value: Integer);

  public

    function SomeAction(const Data: string): Boolean;

»   property Sample: TSample read FSample;

    property SomeValue: Integer read GetSomeValue write SetSomeValue;

  end;

可以看出来了,通过TsampleWrapper的SomeAction方法比引用SampleWrapper.Sample.SomeAction更直接。

类TsampleWrapper的实现代码如下:(一个可以编译的代码段)

function TSampleWrapper.GetSomeValue: Integer;

begin

  Result := Sample.SomeValue;

end;

 

procedure TSampleWrapper.SetSomeValue(Value: Integer);

begin

  Sample.SomeValue := Value;

end;

 

function TSampleWrapper.SomeAction(const Data: string): Boolean;

begin

  Result := Sample.SomeAction(Data);

end;

说明一下类TsampleWrapper:

·      被包装的成员的特性,在包装类中都有着同样的类型,如名称、数据类型,可见性、及其它个别特性。

·      被包装成员的属性也被包装成属性,并且可能通过read、write方法访问。

·      被包装的成员也接供了属性访问接口,也可能通过read、write方法访问。

·      事件与被包装起来,通过read、write方法访问方法,胜于直接访问事件句柄。

·      方法也被包装起来了,并复接被包装类的方法的参数集、现样返回值也是被包装类的返回值。

Delphi实例

 正在组织。

delphi 设计模式 这个资料是可以编辑的,但是相关内容还未修订,但是内容是关于设计模式编程的,非常好.尤其delphi开发技术讲这个的资料还是比较少的 立即下载

相关推荐

《设计模式》DELPHI版

)《设计模式》DELPHI版 Areca Chen翻译 内容很不错。

Delphi版设计模式

用delphi诠释设计模式

QAQ的小耗子的博客 553

【C++】auto关键字(C++11,超详细解析,小白必看系列)

本文详细解析了C++中的“auto”关键字,介绍了其定义、基本用法、限制和高级用法,特别是与范围for循环和Lambda表达式结合的应用。

m0_73494049的博客 6万+

Delphi版设计模式之单例二

​接上篇Delphi版设计模式之单例一,细心的朋友可能发现我在上一篇文章中重写类NewInstance和FreeInstance函数,原因是:【在delphi中编译器对构造函数的保护级别进行了处理,即便设为private,编译器仍然会将其修正为public,所以覆盖基类中的NewInstance类方法,系统在每次构造对象时都会调用这个类方法,通过重载它就可以实现对构造函数的控制】,同时在上篇文章中有一段核心代码 我以注释的形式标注这里在并发环境下存在安全隐患,那么现在我们就通过多线程的方式研究一下这个问.

舞动的代码 579

软件项目管理期末复习(看这一篇就够了)

软件项目管理考试复习 🔶🔶🔶🔶🔶加了🔶的是考点 第一章软件项目管理概述 1.1.1项目及其特征 项目定义:🔶 项目就是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力; 是以一套独特而互相联系的任务为前提,有效地利用资源,在一段时间内满足一系列特定目标的多项相关工作的总称。 日常运作和项目的区别: 项目是一次性的,而日常运作是重复进行的。 项目是以目标为导向的,日常运作是通过效率和有效性体现的。 项目是通过项目经理及其团队工作完成的,日常运作是职能式的线性管理。 项目存在大量的变更管理,

qq_50886857的博客 3万+

uniapp [安卓苹果App端] - 在“安卓app/苹果app“平台端打包编译后,微信授权登录报错 login:fail [:-1]未能完成操作。(PGWXAPI错误-1。)错误码code:-10

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,微信授权登录,uniAppAPP端微信登录报错,出现微信确认登录界面后点击登录报错,BundleID,应用ID,微信登录,app微信一键登录,微信登录绑定点确定就出错,AppSecrect,login:fail[:-1]未能完成操作。(PGWXAPI错误-1。),"errCode":-100,"code":-100,在uniappmanifest.json配置了AppSecrect还是报错无

🏆 前端领域优质创作者 3764

Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之SimpleRemoteControlTest [转]...

//命令的接受者 unit uReceiveObject; interface type TLight = class(TObject) public procedure Open; procedure Off; end; TGarageDoor = class(TObject) public procedure Up; procedure Down...

weixin_30872789的博客 135

逻辑电平(TTL/CMOS/LVDS/LVPECL/CML)

逻辑电平介绍 TTL------晶体管-晶体管逻辑门(Transistor-Transistor Logic gate) TTL采用5V电源

sinat_15677011的博客 2万+

设计模式---Delphi 篇

本文以“观察者”设计模式介绍 “对象--关系映射 ORM ”下面以Delphi  tiOPF 框架实现原理介绍:Abstract the Visitor logicBefore we go any further, we must abstract the Visitor functionality away from the business objects so we never

Mr.Kim.Wu 的日记 1367

Unity3D实现项目限制功能(使用次数限制和时间限制)

大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。在软件开发的时候,可能会遇到程序的使用次数限制,以及时间的限制,下面就写一下这两种方法是新建注册表,增加键值对,修改键值,完成对程序的控制提示:以下是本篇文章正文内容,下面案例可供参考以上就是讲了两种限制方法不定时更新Unity开发技巧,觉得有用记得一键三连哦。

心疼你的一切博客 1811

C语言使用开源库libusb进行USB设备操作

https://libusb.info/libusb is a C library that provides generic access to USB devices. It is intended to be used by developers to facilitate the production of applications that communicate with USB hardware. It is portable: Using a single cross-platform AP

m0_60352504的博客 1554

设计模式、用Delphi实现---->Template Method模式

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 605

“双系统”出炉!瑞芯微RK3562J非对称AMP:Linux+RTOS/裸机

执行如下命令运行Linux应用程序rpmsg_echo,发送8个rpmsg数据包至运行Baremetal程序的Cortex-M0核心,当Cortex-M0核心每收到1个rpmsg数据包就会将数据包发送回Linux端。开发者可灵活分配任务或指定核心间通信,从而增强系统稳定性,减少崩溃风险,保障数据完整。下文以Cortex-A53(CPU0、CPU1、CPU2、CPU3)核心运行Linux系统与rpmsg_echo应用程序,Cortex-M0(MCU)核心运行Baremetal程序为例进行演示。

创龙,嵌入式一体化解决方案商 468

Delphi模式编程

Delphi模式编程

qqrrjj2011的博客 1512

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

设计模式、用Delphi实现---->Decorator 模式

   Decorator 模式起源Delphi的Decorator模式是在Decorator的基础上进行了扩展。更多Decorator模式的资料请参阅 《设计模式115页》目的动态地给一个对象添加一些职责。就增加功能来说,Decorator模式比增加子类更为灵活.动机我们经常要为某一些个别的对象增加一些新的职责,并不是全部的类。假设,我们有一组类用来输出文本行。

programlover的专栏 5175

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

设计模式、用Delphi实现---->Singleton 模式

Singleton模式起源Delphi的SINGLETON模式是在SINGLETON的基础上进行了扩展。更多SINGLETON模式的资料请参阅 《设计模式84页》目的保证一个类仅有一个实例,并提供一个访问它的全局访问点,一个相对简单的应用型设计模式动机此模式最重要的是保证大量类正确的访问单个实例。尽管一台个系统可能有多台打印机,但系统只允许有且只有一个打印缓存。同样比如:一

programlover的专栏 1176

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Delphi五种设计模式

<br />今天抽空浏览了一下Delphi写的设计模式,网页在如下位置:<br />http://www.delphi-jedi.org/art_patterns.html<br />今天再看。仍然有种感觉。我把Observer模式的代码补充到下面。在Delphi 7已经编译通过。Lazarus应该也没有问题。<br />unit Unit2;<br />interface<br />type<br />TObservable = class;<br />TObserver = class;<br />TO

astra_zhao的专栏 2352

设计模式、用Delphi描述-->Abstract Factory模式

Abstract Factory模式(抽象工厂)起源Delphi中的Abstract Factory模式在基本Abstract Factory模式进行了扩展。更多Abstract Factory模式的资料请参阅 [Gam+]目的提供一个创建一系列相关或互依赖对象的接口,面无需指定它们的具体的类。动机这种模式是将你的应用与具体的类分类的最好办法,比如说,你要覆盖Delphi的

programlover的专栏 1002

Delphi5实现主要——明细型数据库应用

主要——明细型数据库应用程序通常包含至少两个数据库表,其中一个表作为“主表”,存储综合信息或主要数据;另一个或多个表作为“明细表”,存储与主表相关联的详细数据。:在主要——明细型数据库中,主表和明细表之间最常见的关系是一对多关系。这意味着主表中的一条记录可以在明细表中有多条相关联的记录。例如,一个客户(主表)可以有多个订单(明细表)。:在应用程序中,用户可以通过主表浏览综合信息,并通过明细表查看与特定记录相关联的详细信息。在Delphi中,主要——明细型数据库是一种数据库应用程序的设计模式,它涉及到。

weixin_52116519的博客 1269

Delphi语言的编程范式

Delphi语言是Object Pascal的一个扩展,结合了结构化编程、面向对象编程(OOP)和事件驱动编程等多种编程范式。以其简洁明了的语法和强大的类库,Delphi使开发人员可以高效地开发Windows应用程序、Web应用程序以及移动应用程序。Object Pascal在Pascal语言的基础上增添了面向对象编程的特性,例如类、继承、多态和封装等。这些特性使得程序的结构更清晰、可维护性更高。同时,Object Pascal也支持异常处理、集合、接口等特性。

2501_90394924的博客 949

用 Delphi 学设计模式(二) 之 工厂方法篇

“开闭原则”:一个模块应该易于扩展,免于修改 问题:请考虑上一章的例子中,如果添加一个新的具体水果类“西瓜”需要做哪些工作。 本章完成以下内容: 1、代码用支持中文的 Delphi 2005 编译并通过,并去除了其中一些无关紧要的地方,如异常处理等 ; 2、重新设计一个情景,分别用“简单工厂模式”和“工厂方法模式”两种方法实现,请体...

weixin_30606669的博客 174

技术演进中的开发沉思-62 DELPHI VCL系列:VCL下的设计模式

本文探讨了DELPHI VCL开发中的三种设计模式:Factory/FactoryMethod、Bootstrap和ForEach。Factory模式通过分离对象创建与使用降低耦合度;Bootstrap模式为程序启动提供标准化初始化流程;ForEach模式则标准化集合遍历操作。文章结合VCL实例,展示了这些模式如何将理论转化为实践,提高代码质量和可维护性。这些设计模式作为开发"指南针",帮助开发者构建更规范高效的程序架构。

你的天空阅读专栏 1050

干净搞定delphi多语言-兼论设计模式

        随着全球化程度加深,软件越来越像蒲公英,到处飘散、扎根。这其中要解决的是不同语言的显示问题。我们当然希望一套程序,可以不修改代码就可以支持不同的语言,不要去维护很多的版本。        首先要谈到的一个问题是乱码问题,因为delphi win32到11.x版还是不支持unicode,所以一般使用Ansi码,有这样几种情况会显示乱码:使用的语言文字与系统当前设定的语

華華的博客 1万+

Delphi版设计模式之单例一

可能Delphi王朝真的没落了,在网上查了很久都是一些重复、陈旧、残缺不全的帖子,搞的像古代的武功秘籍一样,每次只能获取上篇或者下篇,而这些上下还有可能是残篇 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 引自菜鸟教程 从上面的话中不难看出,所谓的设计模式是针对一些常见问题总结出来的一套比较优质的解决方案,所以

舞动的代码 890

MyBatis框架中Wrapper用法

在MyBatis中,Wrapper是一种灵活且强大的查询构建方式,它允许你在动态SQL中插入额外的查询条件。

m0_60492092的博客 7323
上一篇: 微软VB技术资源
下一篇: 设计模式、用Delphi描述-->Lock pattern
programlover
博客等级 码龄26年 1粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值