Java常见设计模式之适配器模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述适配器(Adapter)模式的:
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
适配器模式的用途
用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极、阴极外,还有一个地极。而有些地方的电源插座却只有两极,没有地极。电源插座与笔记本电脑的电源插头不匹配使得笔记本电脑无法使用。这时候一个三相到两相的转换器(适配器)就能解决此问题,而这正像是本模式所做的事情。
适配器模式的结构
适配器模式有类的适配器模式和对象的适配器模式两种不同的形式。
类适配器模式
类的适配器模式把适配的类的API转换成为目标类的API。
在上图中可以看出,Adaptee类并没有sampleOperation2()方法,而客户端则期待这个方法。为使客户端能够使用Adaptee类,提供一个中间环节,即类Adapter,把Adaptee的API与Target类的API衔接起来。Adapter与Adaptee是继承关系,这决定了这个适配器模式是类的:
模式所涉及的角色有:
● 目标(Target)角色:这就是所期待得到的接口。注意:由于这里讨论的是类适配器模式,因此目标不可以是类。
● 源(Adapee)角色:现在需要适配的接口。
● 适配器(Adaper)角色:适配器类是本模式的核心。适配器把源接口转换成目标接口。显然,这一角色不可以是接口,而必须是具体类。
源代码
public interface Target {
/**
* 这是源类Adaptee也有的方法
*/
public void sampleOperation1();
/**
* 这是源类Adapteee没有的方法
*/
public void sampleOperation2();
}
上面给出的是目标角色的源代码,这个角色是以一个JAVA接口的形式实现的。可以看出,这个接口声明了两个方法:sampleOperation1()和sampleOperation2()。而源角色Adaptee是一个具体类,它有一个sampleOperation1()方法,但是没有sampleOperation2()方法。
public class Adaptee { public void sampleOperation1(){} }
适配器角色Adapter扩展了Adaptee,同时又实现了目标(Target)接口。由于Adaptee没有提供sampleOperation2()方法,而目标接口又要求这个方法,因此适配器角色Adapter实现了这个方法。
public class Adapter extends Adaptee implements Target {
/**
* 由于源类Adaptee没有方法sampleOperation2()
* 因此适配器补充上这个方法
*/
@Override
public void sampleOperation2() {
//写相关的代码
} }
对象适配器模式
与类的适配器模式一样,对象的适配器模式把被适配的类的API转换成为目标类的API,与类的适配器模式不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类,而是使用委派关系连接到Adaptee类。
从上图可以看出,Adaptee类并没有sampleOperation2()方法,而客户端则期待这个方法。为使客户端能够使用Adaptee类,需要提供一个包装(Wrapper)类Adapter。这个包装类包装了一个Adaptee的实例,从而此包装类能够把Adaptee的API与Target类的API衔接起来。Adapter与Adaptee是委派关系,这决定了适配器模式是对象的。
源代码
public interface Target {
/**
* 这是源类Adaptee也有的方法
*/
public void sampleOperation1();
/**
* 这是源类Adapteee没有的方法
*/
public void sampleOperation2();
}
public class Adaptee { public void sampleOperation1(){} }
public class Adapter {
private Adaptee adaptee; public Adapter(Adaptee adaptee){
this.adaptee = adaptee;
}
/**
* 源类Adaptee有方法sampleOperation1
* 因此适配器类直接委派即可
*/
public void sampleOperation1(){
this.adaptee.sampleOperation1();
}
/**
* 源类Adaptee没有方法sampleOperation2
* 因此由适配器类需要补充此方法
*/
public void sampleOperation2(){
//写相关的代码
}
}
类适配器和对象适配器的权衡
● 类适配器使用对象继承的方式,是静态的定义方式;而对象适配器使用对象组合的方式,是动态组合的方式。
● 对于类适配器,由于适配器直接继承了Adaptee,使得适配器不能和Adaptee的子类一起工作,因为继承是静态的关系,当适配器继承了Adaptee后,就不可能再去处理 Adaptee的子类了。
对于对象适配器,一个适配器可以把多种不同的源适配到同一个目标。换言之,同一个适配器可以把源类和它的子类都适配到目标接口。因为对象适配器采用的是对象组合的关系,只要对象类型正确,是不是子类都无所谓。
● 对于类适配器,适配器可以重定义Adaptee的部分行为,相当于子类覆盖父类的部分实现方法。
对于对象适配器,要重定义Adaptee的行为比较困难,这种情况下,需要定义Adaptee的子类来实现重定义,然后让适配器组合子类。虽然重定义Adaptee的行为比较困难,但是想要增加一些新的行为则方便的很,而且新增加的行为可同时适用于所有的源。
● 对于类适配器,仅仅引入了一个对象,并不需要额外的引用来间接得到Adaptee。
对于对象适配器,需要额外的引用来间接得到Adaptee。
建议尽量使用对象适配器的实现方式,多用合成/聚合、少用继承。当然,具体问题具体分析,根据需要来选用实现方式,最适合的才是最好的。
适配器模式的优点
- 更好的复用性
系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。
- 更好的扩展性
在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。
适配器模式的缺点
过多的使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
缺省适配模式
缺省适配(Default Adapter)模式为一个接口提供缺省实现,这样子类型可以从这个缺省实现进行扩展,而不必从原有接口进行扩展。作为适配器模式的一个特例,缺省是适配模式在JAVA语言中有着特殊的应用。
鲁智深的故事
和尚要做什么呢?吃斋、念经、打坐、撞钟、习武等。如果设计一个和尚接口,给出所有的和尚都需要实现的方法,那么这个接口应当如下:
public interface 和尚 {
public void 吃斋();
public void 念经();
public void 打坐();
public void 撞钟();
public void 习武();
public String getName();
}
显然,所有的和尚类都应当实现接口所定义的全部方法,不然就根本通不过JAVA语言编辑器。像下面的鲁智深类就不行。
public class 鲁智深 implements 和尚{
public void 习武(){
拳打镇关西;
大闹五台山;
大闹桃花村;
火烧瓦官寺;
倒拔垂杨柳;
}
public String getName(){
return "鲁智深";
}
}
由于鲁智深只实现了getName()和习武()方法,而没有实现任何其他的方法。因此,它根本就通不过Java语言编译器。鲁智深类只有实现和尚接口的所有的方法才可以通过Java语言编译器,但是这样一来鲁智深就不再是鲁智深了。以史为鉴,可以知天下。研究一下几百年前鲁智深是怎么剃度成和尚的,会对Java编程有很大的启发。不错,当初鲁达剃度,众僧说:“此人形容丑恶、相貌凶顽,不可剃度他",但是长老却说:”此人上应天星、心地刚直。虽然时下凶顽,命中驳杂,久后却得清净。证果非凡,汝等皆不及他。”
原来如此!看来只要这里也应上一个天星的话,问题就解决了!使用面向对象的语言来说,“应”者,实现也;“天星”者,抽象类也。
public abstract class 天星 implements 和尚 {
public void 吃斋(){}
public void 念经(){}
public void 打坐(){}
public void 撞钟(){}
public void 习武(){}
public String getName(){
return null;
}
}
鲁智深类继承抽象类“天星”
public class 鲁智深 extends 和尚{
public void 习武(){
拳打镇关西;
大闹五台山;
大闹桃花村;
火烧瓦官寺;
倒拔垂杨柳;
}
public String getName(){
return "鲁智深";
}
}
这个抽象的天星类便是一个适配器类,鲁智深实际上借助于适配器模式达到了剃度的目的。此适配器类实现了和尚接口所要求的所有方法。但是与通常的适配器模式不同的是,此适配器类给出的所有的方法的实现都是“平庸”的。这种“平庸化”的适配器模式称作缺省适配模式。
在很多情况下,必须让一个具体类实现某一个接口,但是这个类又用不到接口所规定的所有的方法。通常的处理方法是,这个具体类要实现所有的方法,那些有用的方法要有实现,那些没有用的方法也要有空的、平庸的实现。
这些空的方法是一种浪费,有时也是一种混乱。除非看过这些空方法的代码,程序员可能会以为这些方法不是空的。即便他知道其中有一些方法是空的,也不一定知道哪些方法是空的,哪些方法不是空的,除非看过这些方法的源代码或是文档。
缺省适配模式可以很好的处理这一情况。可以设计一个抽象的适配器类实现接口,此抽象类要给接口所要求的每一种方法都提供一个空的方法。就像帮助了鲁智深的“上应天星”一样,此抽象类可以使它的具体子类免于被迫实现空的方法。
缺省适配模式的结构
缺省适配模式是一种“平庸”化的适配器模式。
aaarticlea/png;base64,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" alt="" />
public interface AbstractService {
public void serviceOperation1();
public int serviceOperation2();
public String serviceOperation3();
}
public class ServiceAdapter implements AbstractService{ @Override
public void serviceOperation1() {
} @Override
public int serviceOperation2() {
return 0;
} @Override
public String serviceOperation3() {
return null;
} }
可以看到,接口AbstractService要求定义三个方法,分别是serviceOperation1()、serviceOperation2()、serviceOperation3();而抽象适配器类ServiceAdapter则为这三种方法都提供了平庸的实现。因此,任何继承自抽象类ServiceAdapter的具体类都可以选择它所需要的方法实现,而不必理会其他的不需要的方法。
适配器模式的用意是要改变源的接口,以便于目标接口相容。缺省适配的用意稍有不同,它是为了方便建立一个不平庸的适配器类而提供的一种平庸实现。
在任何时候,如果不准备实现一个接口的所有方法时,就可以使用“缺省适配模式”制造一个抽象类,给出所有方法的平庸的具体实现。这样,从这个抽象类再继承下去的子类就不必实现所有的方法了。
原文地址:http://www.cnblogs.com/java-my-life/archive/2012/04/13/2442795.html
Java常见设计模式之适配器模式的更多相关文章
- Java常见设计模式学习(非原创)
文章大纲 一.策略模式二.观察者模式三.工厂模式四.单例模式五.其他模式六.设计模式总结七.参考文章 一.策略模式 现在假设我们有个"鸭子项目",首先我们用OOP(面向对象)的 ...
- Java常见设计模式之代理模式
指由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其它相关业务的处理.比如生活中的通过代理访问网络,客户通过网络代理连接网络(具体业务),由代理服务器完成用户权限和访问限制等与 ...
- Java常见设计模式之工厂模式
工厂模式在我们日常的应用中应当算是比较广泛的一种设计模式了.今天让我们一起来学习一下,工厂的设计模式. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple F ...
- Java常见设计模式之单例模式
1.何为单例模式? 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的 ...
- java常见设计模式简要总结
设计模式六大原则 1.开放封闭原则:对扩展开放,对修改封闭,意即程序拓展时不要动原有的代码 2.LSP原则:任何基类可以出现的地方,子类一定可以出现 3.依赖倒置原则:使用接口,依赖于抽象而不是具体 ...
- 基于JAVA的设计模式之适配器模式
适配器模式概念 适配器模式把一个类的接口变换成客户端所期待的另一个接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作.比如我们突然就想看电影了,但是这个电影是AVI格式的,目前我们开发 ...
- Java常见设计模式之观察者模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述观察者(Observer)模式的: 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Mo ...
- Java常见设计模式之责任链模式
原文地址: http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html 在阎宏博士的<JAVA与模式>一书中开 ...
- java常见设计模式
工厂模式 普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建. 多个工厂模式,编写多个创建工厂的方法即可. 静态工厂模式,在多个工厂模式的基础上把Factory种方法的返回值标明 ...
随机推荐
- IDEA报错: Invalid bound statement (not found): com.test.mapper.UserMapper.selectByPrimaryKey(转发:https://www.cnblogs.com/woshimrf/p/5138726.html)
学习mybatis的过程中,测试mapper自动代理的时候一直出错,在eclipse中可以正常运行,而同样的代码在idea中却无法成功.虽然可以继续调试,但心里总是纠结原因.百度了好久,终于找到一个合 ...
- 冒泡排序的三种实现(Java)
冒泡排序是非常好理解的,以从小到大排序为例,每一轮排序就找出未排序序列中最大值放在最后. 设数组的长度为N: (1)比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换. (2)这样 ...
- 4django模板
在前面的几节中我们都是用简单的django.http.HttpResponse来把内容显示到网页上,本节将讲解如何使用渲染模板的方法来显示内容 1.创建一个 zqxt_tmpl 项目,和一个 名称为 ...
- crontab定时任务(待补充)
cron是一个ubuntu下的后台进程,用来定期的执行一些任务 想让cron执行你指定的任务,首先就要编辑crontab文件.crontab是一个文本文件,用来存放你要运行的命令 第一种 vim /e ...
- Data Structure Linked List: Function to check if a singly linked list is palindrome
http://www.geeksforgeeks.org/function-to-check-if-a-singly-linked-list-is-palindrome/ 这里的reverse可以re ...
- 【leetcode刷题笔记】Reverse Nodes in k-Group
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. If ...
- Linux电源管理(1)-整体架构【转】
本文转载自:http://www.wowotech.net/pm_subsystem/pm_architecture.html 1. 前言 在这个世界中,任何系统的运转都需要能量.如树木依靠光能生长, ...
- ATI AMD
AMD是一个CPU公司,而ATI是一个显卡公司.在2006年7月24日,AMD公司将ATI公司百分之百收购了,也自然和AMD结为一体,也生产显卡了.它们的区别如下1:它们生产的物品不同,AMD生产处理 ...
- 算法(Algorithms)第4版 练习 1.5.12
package com.qiusongde; import edu.princeton.cs.algs4.StdIn; import edu.princeton.cs.algs4.StdOut; pu ...
- 句柄与MFC对象关系和相互获取
Windows对象是以句柄来标识的,对应的MFC类就是这些句柄的C++包装.内存中的Windows对象一定有唯一的句柄来标识,但不一定有对应的MFC类对象在内存中.当需要获取Windows对象的对应M ...