适配器模式

来源:互联网 发布:如何编写淘宝客招募贴 编辑:程序博客网 时间:2024/05/29 02:10

这一篇博客记录一下适配器模式。


简单来说,适配器的作用就是将一个接口转换成另一个接口,以符合客户的期望。

我们就以手机通过USB线充电的场景为例,看看适配器模式。

如上图所示,手机充电时需要的实际上是一个USB接口。
但是,现在只有一个常规的插座可以供电。
此时,只要有一个手机充电插头,
就能满足手机充电的需求了。

上述例子中:
手机就是用户,它期待USB接口;
手机充电插头就是适配器,它可以将插座接口,
转化为USB接口,满足客户的需求。


在理解了适配器的大致情况后,
我们就可以看看适配器模式的定义及结构图了。

适配器模式将一个类的接口,转换成客户期望的另一个接口。
适配器让原本接口不兼容的类可以合作无间。

结合上图,我们总结下客户使用适配器的过程:
1、客户通过目标接口调用适配器的方法对适配器发出请求。
2、适配器使用被适配者的一个或多个接口来完成实际的工作。
3、客户收到返回结果,但并未察觉到适配器在其中进行了转换作用。

从上图还可以看出,被适配者的任何子类都可以搭配适配器使用。


根据上述介绍可以看出,适配器的用法还是很简单的,
给出Head First上的一个示例:

//Emueration适配器,将Emueration适配成Iteratorpublic class EnumerationIterator implements Iterator {    //Adaptee    Enumeration enum;    public EnumerationIterator(Enumeration enum) {        this.enum = enum;    }    //Iterator的接口实际上由Enumeration来实现    public boolean hasNext() {        return enum.hasMoreElements();    }    public Object next() {        return enum.nextElement();    }    //Enumeration不提供类似remove的功能,因此抛出异常    //适配器模式也不是万能的    public void remove() {        throw new UnsupportedOperationException();    }}

在文章的最后,稍微提一下:
从结构来看,适配器模式和装饰者模式有些相似之处。
例如,装饰者需要持有被装饰对象,适配器也持有被适配对象。

它们二者的区别在于:
装饰者的目的是:不改变接口,但加入责任;
适配器的目的是:将一个接口转化成另一个接口。

0 0
原创粉丝点击