适配器模式:
1、解决历史遗留不同版本的兼容问题。
这个模式一般是在系统不断升级的过程中,新版本的接口相比老接口改变了很多。
需要面向新的接口编程,但是很多代码都是基于旧版本去封装的。

此时就通过适配器,它实现新接口,但是组合了老接口的实现类,多数功能的实现是通过复用老接口的实现类搞定的。这样既实现了新接口,又复用了老代码

2、不同的第三方接口问题
还有一种情况,是对于已有的第三方类库,比如redis的客户端,或者是elasticsearch的客户端,他们提供了一套API,但是我们这里的要求是需要面向我们这里的DAO接口来进行编程,此时可以写一个适配器

实例:

定义一个自有的文件操作接口,当前是用jdk自带的文件操作java.io.File
写一个适配器来封装对File的操作,能够兼容自己的接口

/**
 * 文件接口
 * @author 
 *
 */
public interface CommonFile {

	/**
	 * 判断文件是否存在
	 * @return 是否存在
	 * @throws Exception
	 */
	Boolean exists() throws Exception;
	
	/**
	 * 递归创建所有子目录
	 * @return 处理结果
	 * @throws Exception
	 */
	Boolean createDirectories() throws Exception;
	
	/**
	 * 获取文件的绝对路径 
	 * @return 绝对路径
	 * @throws Exception
	 */
	String getAbsolutePath() throws Exception;
	
	/**
	 * 获取文件名
	 * @param file 文件 
	 * @return 文件名
	 * @throws Exception
	 */
	String getFilename() throws Exception;
	
	/**
	 * 删除文件
	 * @return 处理结果
	 * @throws Exception
	 */
	Boolean remove() throws Exception;
	
	/**
	 * 获取文件路径
	 * @return 文件路径
	 * @throws Exception
	 */
	String getPath() throws Exception; 
	
}

/**
 * 文件
 * @author 
 *
 */
public class CommonFileAdapter implements CommonFile {

	private File file;
	
	public CommonFileAdapter(String path) {
		this.file = new File(path); 
	}
	
	/**
	 * 判断文件是否存在
	 * @return 是否存在
	 * @throws Exception
	 */
	@Override
	public Boolean exists() throws Exception {
		return file.exists();
	}
	
	/**
	 * 递归创建所有子目录
	 * @return 处理结果
	 * @throws Exception
	 */
	@Override
	public Boolean createDirectories() throws Exception {
		return file.mkdirs();
	}
	
	/**
	 * 获取文件的绝对路径 
	 * @return 绝对路径
	 * @throws Exception
	 */
	@Override
	public String getAbsolutePath() throws Exception {
		return file.getAbsolutePath();
	}
	
	/**
	 * 获取文件名
	 * @param file 文件 
	 * @return 文件名
	 * @throws Exception
	 */
	@Override
	public String getFilename() throws Exception {
		return file.getName();
	}
	
	/**
	 * 删除文件
	 * @return 处理结果
	 * @throws Exception
	 */
	@Override
	public Boolean remove() throws Exception {
		return file.delete();
	}

	/**
	 * 获取文件路径
	 */
	@Override
	public String getPath() throws Exception {
		return file.getPath();
	}
	
}