设计模式之结构型(1)-适配器模式(Adapter)

设计模式之结构型(1)-适配器模式(Adapter)

(一)定义:将一个接口转换成为客户想要的另一个接口,适配器模式使接口不兼容的那些类可以一起工作。
    适配器模式可以将一个类的程序设计接口转换成另外一个接口。当我们想让不相关的类在一个程序里一起工作时,可以使用适配器。适配器的概念相当简单:编写一个具有需要的接口的类,然后让它和拥有不同接口的类进行通信。
    有两种方法可以做到这一点:通过类继承和通过对象组合。第一种情况中,从一个不一致的类里派生出一个新类,然后添加需要的方法,使新的派生类能匹配所需要的接口。另一种方式是,把原始类包含在新类中,然后在新类中创建方法去转换调用。这两种方法分别叫做类适配器对象适配器。二者都比较容易实现。

1.1  UML类图

imageimage

1.2  类与对象之间关系

Target:目录抽象类,定义客户要用的特定领域的接口

Adapter:适配器(公共接口),调用另一个接口,作为一个转换器

Adaptee:适配器(母接口),定义一个接口,Adapter需要接入。

Client:客户调用类。

1.3  典型调用顺序图

image

适配器定义-源码public class Target
{
    public virtual string Request()
    {
        Console.WriteLine("普通请求!!");
        return "Target普通请求!";
    }
}

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

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

    public override string Request()
    {
        return adaptee.SpecificRequest();
    }
}

public class Client
{
    public string Run()
    {
        Target target = new Adapter();
        return target.Request();
    }
}

(二) 适配器模式适用性

    要想使用一个已存在的类,但如果它的接口,也就是它的方法和要求的不相同时,两个类所做的事情相同或相似,但是具有不同的接口时要使用它。就应该考虑用适配器模式。客户代码可以统一调用同一接口。
    在.NET中有一个类库DataAdapter就是适配器模式的应用。DataAdapter用作DataSet和数据源之间的适配器以便检索和保存数据,DataAdapter通过映射Fill和Update来提供这一适配器。由于数据源可能来自SQL Server,可能来自Oracle,也可能来自Access,这些数据在组织上可能有不同之处,但我们希望得到统一的DataSet(实质是XML数据)。此时可以用DataAdapter就是非常好的方式。

例子:用适配器模式实现如下这样的一个需求的程序。传统上实现这样的程序也比较简单。  源码下载

123

代码类图分析:红色区域部分即是隔离了与具体ListBox类之间的操作。中间加入了一个ListAdapter适配器来隔离与具体类之间的操作。

imageimage

posted @ 2014-04-30 00:00 李华丽 阅读( ...) 评论( ...) 编辑 收藏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值