.Net设计模式之适配器模式
【IT168技术文档】
概述
1.1意图
使接口不兼容的类能够协同工作。通常情况下,这些接口不兼容的类在逻辑上的功能是一致或者相似的。例如采用RS232协议和TCP/IP的目的都是为了传输数据,支持这两种协议的API却是截然不同的。
1.2结构
适配器有类适配器和对象适配器两种类型,二者的意图相同,只是实现的方法和适用的情况不同。类适配器采用继承来实现,对象适配器则采用组合的方法来实现。
(1)类适配器:类适配器通过多生继承对一个接口与另一个接口进行匹配。
Target定义了Client使用的与特定领域相关的接口,Client通过调用Target实现某一个特定的操作。Adaptee是一个已经存在的类,需要与Target协同工作,这个接口需要适配。Adapter适配器适配Adaptee和Target接口。在类适配器中,通过继承获得Adaptee中的方法。
在对象适配器中通过组合获得Adaptee对象:
为了使程序兼容两种播放器,我们定义了一个播放器的接口。然后用两个适配器分别实现这个接口,并调用RealPlay和 MS Media Player的API,这是典型的对象适配器。
Pulic class Adapter:Adaptee,Target { Target 成员#region Target 成员 public void Do( ) { this.Execute( ); } #endregion }
类适配器的使用有一这限制,由于.NET不支持多重继承,即一个类只能有一个父类。因此当Target是一个类,而不是一个接口时无法实现类适配器,这时需要使用对象适配器。
(2)对象适配器:对象适配器采用对象组合,通过引用一个类与另一个类接口。
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,即被客户操作的是目标。
多媒体播放对象
回到上节的问题,我们在开发多媒体播放器时,希望可以采用RealPlay和 MS MediaPlay两种播放器。而二者的接口完全不同,并且我们可能在将来引入其他播放器。
0
相关文章