MaoBisheng

Asp.Net(C#) & SQL & Oracle

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

6. Adapter 适配器模式  2008-8-9

适配转换的概念无处不在。。。。

适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口。

动机(Motivation

在软件系统中,由于应用环境的变化,常常需要将一些现存的对象放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。

如何应对这种迁移的变化?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?

意图(Intent

将一个类的接口转换成客户希望的另一个接口,adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

                                                                                               ——《设计模式》GoF

基本代码:

    class Program
    {
        
static void Main(string[] args)
        {
            Target target 
= new Adapter();
            target.Request();

            Console.Read();
        }
    }

    
class Target
    {
        
public virtual void Request()
        {
            Console.WriteLine(
"普通请求");
        }
    }

    
class Adaptee
    {
        
public void SpecificRequest()
        {
            Console.WriteLine(
"特殊请求");
        }
    }

    
class Adapter : Target
    {
        
private Adaptee afaptee = new Adaptee();

        
public override void Request()
        {
            afaptee.SpecificRequest();
        }
    }

运行结果为:特殊请求

Adapter的几个要点:

Adapter模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况,在遗留代码复用、类库迁移等方面非常有用。

GoF 23 定义了两种Adapter模式的实现结构:对象适配器和类适配器。但类适配器采用多继承的实现方式,带来了不良的高耦合,所以一般不推荐使用。对象适配器采用对象组合的方式,更符合松耦合精神。

Adapter模式可以实现的非常灵活,不必拘泥于Gof23中定义的两种结构。例如,完全可以将Adapter模式中的现存对象作为新的接口方法参数,来达到适配的目的。

Adapter模式本身要求我们尽可能地使用面向接口的编程风格,这样才能在后期很方便地适配。

                                      

 

 

posted on 2008-08-09 19:09  MaoBisheng  阅读(298)  评论(0编辑  收藏  举报