技术开发 频道

.Net设计模式之适配器模式

【IT168技术文档】

  概述
 
  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,即被客户操作的是目标。
 
  多媒体播放对象
 
  回到上节的问题,我们在开发多媒体播放器时,希望可以采用RealPlay和 MS MediaPlay两种播放器。而二者的接口完全不同,并且我们可能在将来引入其他播放器。
 
  为了使程序兼容两种播放器,我们定义了一个播放器的接口。然后用两个适配器分别实现这个接口,并调用RealPlay和 MS Media Player的API,这是典型的对象适配器。
0
相关文章