就他吧-9ta8为您提供:身份证查询、15位转16位身份证,手机号码归属地查询,IP地址查询服务,城市天气预报查询,列车时刻表简易快速查询等等查询服务,就他吧欢迎您的光临!!
梦幻Dot Net
科学地研究编程,品味开发的艺术
博客园
首页
新随笔
联系
订阅
管理
随笔-93 评论-627 文章-7 trackbacks-76
Dot Net设计模式—适配器模式
1.概述
1.1意图
使接口不兼容的类能够协同工作。通常情况下,这些接口不兼容的类在逻辑上的功能是一致或者相似的。例如采用RS232协议和TCP/IP的目的都是为了传输数据,支持这两种协议的API却是截然不同的。
1.2结构
适配器有类适配器和对象适配器两种类型,二者的意图相同,只是实现的方法和适用的情况不同。类适配器采用继承来实现,对象适配器则采用组合的方法来实现。
(1)类适配器:类适配器通过多生继承对一个接口与另一个接口进行匹配,其结构如图所示。
Target定义了Client使用的与特定领域相关的接口,Client通过调用Target实现某一个特定的操作。Adaptee是一个已经存在的类,需要与Target协同工作,这个接口需要适配。Adapter适配器适配Adaptee和Target接口。
在类适配器中,通过继承获得Adaptee中的方法。
Pulic
class
Adapter:Adaptee,Target
{
Target 成员
#region
Target 成员
public
void
Do( )
{
this
.Execute( );
}
#endregion
}
类适配器的使用有一这限制,由于.NET不支持多重继承,即一个类只能有一个父类。因此当Target是一个类,而不是一个接口时无法实现类适配器,这时需要使用对象适配器。
(2)对象适配器:对象适配器采用对象组合,通过引用一个类与另一个类接口,其结构如图所示。
在对象适配器中通过组合获得Adaptee对象:
public
class
Adapter:Target
{
private
Adaptee adaptee;
public
Adapter(Adaptee ap)
{
adaptee
=
ap;
}
Target 成员
#region
Target 成员
public
void
Do( )
{
adaptee.Execute( );
}
#endregion
}
1.3使用场合
适配器模式适用于以下情况。
(1)需要使用一个已经存在的类,但接口与设计要求不符。
(2)希望创建一个可以复用的类,该类可以与其他不相关的类或者是将来不可预见的类协同工作。
在使用适配器时应注意理解适配器的方向性,即注意区分适配器中的Adaptee(适配对象)和Target(目标),在适配器的原理图中很容易看出Target,即被客户操作的是目标。
2.多媒体播放对象
回到上节的问题,我们在开发多媒体播放器时,希望可以采用RealPlay和 MS MediaPlay两种播放器。而二者的接口完全不同,并且我们可能在将来引入其他播放器。
为了使程序兼容两种播放器,我们定义了一个播放器的接口。然后用两个适配器分别实现这个接口,并调用RealPlay和 MS Media Player的API,这是典型的对象适配器。
采用对象适配器的结构如图所示。
代码如下:
'
播放器的接口
Public
Interface AudioPlayer
Interface
AudioPlayer
Sub DoPlay()
Sub
DoPlay()
Sub DoStop()
Sub
DoStop()
Sub DoPause()
Sub
DoPause()
Property Source()
Property
Source()
As
String
End Interface
'
采用Real Player API的播放器
Public
Class RealAuidoPlayer
Class
RealAuidoPlayer
Implements
AudioPlayer
Private
mAP
As
AxRealAudioObjects.AxRealAudio
Public
Sub New()
Sub
New
(
ByVal
c
As
Control)
mAP
=
New
AxRealAudioObjects.AxRealAudio
c.Controls.Add(mAP)
mAP.Visible
=
False
End Sub
Public
Sub DoPause()
Sub
DoPause()
Implements
AudioPlayer.DoPause
mAP.DoPause()
End Sub
Public
Sub DoPlay()
Sub
DoPlay()
Implements
AudioPlayer.DoPlay
mAP.DoPlay()
End Sub
Public
Sub DoStop()
Sub
DoStop()
Implements
AudioPlayer.DoStop
mAP.DoStop()
End Sub
Public
Property Source()
Property
Source()
As
String
Implements
AudioPlayer.Source
Get
Return
mAP.Source
End
Get
Set
(
ByVal
Value
As
String
)
mAP.Source
=
Value
End
Set
End Property
End Class
'
采用MS Media Player 的播放器类
Public
Class MediaPlayer
Class
MediaPlayer
Implements
AudioPlayer
Private
mAP
As
WMPLib.WindowsMediaPlayerClass
Private
ms
As
String
Public
Sub New()
Sub
New
()
mAP
=
New
WMPLib.WindowsMediaPlayerClass
End Sub
Public
Sub DoPause()
Sub
DoPause()
Implements
AudioPlayer.DoPause
mAP.pause()
End Sub
Public
Sub DoPlay()
Sub
DoPlay()
Implements
AudioPlayer.DoPlay
mAP.play()
End Sub
Public
Sub DoStop()
Sub
DoStop()
Implements
AudioPlayer.DoStop
mAP.
stop
()
End Sub
Public
Property Source()
Property
Source()
As
String
Implements
AudioPlayer.Source
Get
Return
mAP.URL
End
Get
Set
(
ByVal
Value
As
String
)
mAP.URL
=
Value
mAP.pause()
End
Set
End Property
End Class
采用类适配器的结构如图所示。
以RealPlay为例,代码如下:
1
'
采用Real Play API的播放器类,类适配器
2
Public
Class RealAudioPlayerClass
Class
RealAudioPlayerClass
3
Inherits
AxRealAudioObjects.AxRealAudio
4
Implements
AudioPlayer
5
6
Public
Sub New()
Sub
New
(
ByVal
c
As
Control)
7
c.Controls.Add(
Me
)
8
Me
.Visible
=
False
9
End Sub
10
11
Public
Sub DoPause()
Sub
DoPause()
Implements
AudioPlayer.DoPause
12
MyBase
.DoPause()
13
End Sub
14
15
Public
Sub DoPlay()
Sub
DoPlay()
Implements
AudioPlayer.DoPlay
16
MyBase
.DoPlay()
17
End Sub
18
19
Public
Sub DoStop()
Sub
DoStop()
Implements
AudioPlayer.DoStop
20
MyBase
.DoStop()
21
End Sub
22
23
Public
Property Source()
Property
Source()
As
String
Implements
AudioPlayer.Source
24
Get
25
Return
MyBase
.Source
26
End
Get
27
Set
(
ByVal
Value
As
String
)
28
MyBase
.Source
=
Value
29
End
Set
30
End Property
31
End Class
32
3..NET中的适配器——DataAdapter
ADO.NET为统一的数据访问提供了多个接口和基类,其中最重要的接口之一是IdataAdapter。与之相对应的DataAdpter是一个抽象类,它是ADO.NET与具体数据库操作之间的数据适配器的基类。DataAdpter起到了数据库到DataSet桥接器的作用,使应用程序的数据操作统一到DataSet上,而与具体的数据库类型无关。甚至可以针对特殊的数据源编制自己的DataAdpter,从而使我们的应用程序与这些特殊的数据源相兼容。
例如,在多数据源的数据采集系统中,需要从自定义实时数据库中读出并处理数据。我们已经有了数据处理类和数据显示类,这些类是为关系数据库开发的,但同样可以用在实时数据显示中。由于这些类操作的是DataSet,因此我们可以定义一个特殊的适配器实现从实时数据库接口对象中填充DataSe,这样使得针对这些自定义的数据库的操作与一般的关系数据库完全一样。由于针对实时数据库只涉及查询,不涉及更新和删除,所以实现并不复杂,其结构如图所示。
这里省略了实现的代码。采用数据适配器可以使不同格式的数据源都可以被相同的上层应用使用,从而提高了系统的可扩展性和可维护性。
posted on 2005-08-13 16:10
振河
阅读(1923)
评论(1)
编辑
收藏
所属分类:
.Net设计模式
评论:
#1楼
2005-08-20 15:48 |
flyarror [未注册用户]
厉害!!
回复
引用
社区
新闻
新用户注册
刷新评论列表
标题
姓名
主页
Email
(只有博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2005-08-24 08:59 编辑过
相关文章:
.NET设计模式系列文章
使用Visual Studio2005入门.Net2.0系列视频教程
.NET设计模式(2):单件模式(Singleton Pattern)
.NET设计模式(3):抽象工厂模式(Abstract Factory)
Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇
C#设计模式(1)
相关链接:
所属分类的其他文章:
Dot Net设计模式—MVC模式
用实例解说Dot Net设计模式——装饰模式
创建型模式之间的比较
.NET反射、委托技术与设计模式
Dot Net设计模式—适配器、桥接与外观三模式之间的关系
Dot Net设计模式—外观模式
如何在实际工作中发现模式(二)
如何在实际工作中发现模式(一)
Dot Net设计模式—桥接模式
Dot Net设计模式—适配器模式
最新IT新闻:
Google拟在9月发布自有浏览器 或采用火狐内核
微软正在构思将Wi-Fi带入汽车
对比测试:IE8 Beta 2 VS Firefox 3.0.1
iPhone存在严重密码安全漏洞
GC2008:星际争霸2进程报告 微调进程延续
博客园新闻频道
博客园首页
社区
清新的空气清晰的你愉快的心情陪伴你,欢迎来到梦幻Dot Net。
<
2005年8月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(24)
给我留言
查看留言
我参与的团队
Design & Pattern团队(3/848)
.NET 控件与组件开发(0/1361)
敏捷软件开发组织(0/278)
北京.NET俱乐部(2/1463)
Dot Net Web服务和Windows服务开发(0/231)
正则表达式团队(0/2)
随笔分类
.Net设计模式(21)
ASP.Net(9)
C#(12)
C#2005(2)
DotText
JavaScript(8)
Reporting Services(6)
SD Channel
SQL Server 2000(10)
Visio Studio 2005 WPF(2)
Web and Windows Service(5)
其他(7)
软件工程(7)
正则表达式(2)
随笔档案
2008年3月 (1)
2008年1月 (2)
2007年12月 (1)
2007年11月 (1)
2007年10月 (4)
2007年8月 (1)
2007年7月 (1)
2007年5月 (1)
2007年4月 (1)
2007年3月 (1)
2007年1月 (2)
2006年12月 (1)
2006年10月 (1)
2006年9月 (2)
2006年8月 (1)
2006年7月 (1)
2006年4月 (1)
2006年3月 (4)
2006年2月 (1)
2006年1月 (1)
2005年12月 (1)
2005年11月 (1)
2005年10月 (5)
2005年9月 (11)
2005年8月 (36)
2005年7月 (10)
文章分类
ASP.NET(2)
安全与加密(1)
管理(1)
生活(1)
数据库(2)
文章档案
2007年12月 (1)
2005年10月 (1)
2005年9月 (1)
2005年8月 (4)
相册
宝贝动物
精彩贴图
生活餐具
.NET技术网站
ASP.NET开发实践系列课程
ASP酷技术网
CodeProject
KnowDotNet
Visual Studio.net专栏
博客堂
发赛特技术网
酷网博客
孟宪会.NET开发者园地
太平洋开发编程技术与实例
天新网DotNet
新一代技术网
站长中国
正则表达式
中国C#技术网站
中文C#站
其他技术网
ASP.NET Forums 官方中文网站
MSDN中文站
动态网站制作指南
正则表达式网站(Eng)
中国BS网
中国Office Online
中国WEB开发者网络
数据库技术网站
SQL Server 提示与技巧
数据仓库之路
友情连接
就他吧服务
就他吧为您提供软件开发,网站设计,网站开发维护,各种办公软件、管理软件开发等等,详情请进入
http://www.9ta8.com
幽默笑话
笑话大全、智慧快餐、暴笑网文、高笑图片、恐怖故事、幽默短信、相声小品尽在其中,就他吧幽默站开心您每一天
积分与排名
积分 - 249904
排名 - 122
最新评论
1. re: DotNet WebService和WindowsService团队开通
1.博客园帐户名:yjmyzz 2.电子邮件:yjmyzz@126.com 3.博客园地址: 4.申请目的:学习和探讨Web服务或者Windows服务的开发原理,技巧以及实践经验. ...
--yjmyzz
2. re: DotNet WebService和WindowsService团队开通
1.博客园帐户名:Clefoo 2.电子邮件:clefoo@126.com 3.博客园地址: 4.申请目的:学习和探讨Web服务或者Windows服务的 ...
--Clefoo的马甲
3. re: DotNet WebService和WindowsService团队开通
我非常希望加入 1.博客园帐户名:aierong 2.电子邮件:aierong@126.com 3.博客园地址: ...
--aierong
4. re: COM+组件与COM+服务使用的区别
你好,我想请教您两个问题,关于开发COM+方面的.可以加下我QQ吗,QQ:285625240
--wangjianguo
5. re: C#几种常用的排序算法
不错啊,呵呵,理解了,谢谢你啊
--顾客
阅读排行榜
1. 正则表达式基础知识(21433)
2. 全面剖析C#正则表达式(18159)
3. C#反射实例讲解(9929)
4. .NET反射、委托技术与设计模式(9842)
5. .Net调用Java的WebService之亲身体验(9293)
评论排行榜
1. DotNet WebService和WindowsService团队开通(124)
2. 如何掌握并在实践中自如运用设计模式(51)
3. C#写的一个代码生成器(35)
4. 用.Net开发Windows服务初探(27)
5. .NET反射、委托技术与设计模式(21)
就他吧-9ta8伴您开心每一天