在学习适配器模式时,看到一篇文章讲得很易懂,应用场景明确.
https://www.ibm.com/developerworks/cn/java/j-lo-adapter-pattern/
此处也结合自己的理解,记录一篇文章,
1. 对象适配器
场景: 出现了一个新的接口, 但又想适配某个旧接口.
如: 原有写了一个文件类型日志操作接口 FileLogInterface, 里面的方法名为 doFileLog();
public interface FileLogInterface{
void doFileLog();
}
//实现类
public class FileLogService implements FileLogInterface{
public void doFileLog(){
//具体业务代码省略
}
}
可是后来为了适应多种日志方式, 如数据库记录日志.开发了一个新的日志接口. FileInterface, 里面记录日志的方法名为 doFile(); 另外还增加了一些其他接口方法.
//新的日志接口
public interface FileInterface{
void doLog();
String getLogType();
void doXXXX();
//等等的接口
}
//数据库日志实现类
public class DBFileService implements FileInterface{
pulbic void doLog(){
LogBean bean = new LogBean("1","我是登陆日志");
dao.insert(bean); //存储到数据库中
}
public String getLogType(){
return "DBLog";
}
public void doXXX(){
//省略代码...
}
}
现在所有新的日志实现类都实现 FileInterface 接口, 可是原来的文件类型日志实现类也还能用, 又不想改(因为会影响旧的代码). 此处就使用一个适配器来适配.
FileLogAdapter. 在 doFile()中, 使用成员进行调用原有的doFileLog(),其他的接口方法, 按需实现.(如空实现, 抛异常等)
public class FileLogAdapter implements FileInterface{
private FileLogInterface logger;
public FileLogAdapter(FileLogInterface logger){
this.logger = logger;
}
public void doLog(){
logger.doFileLog(); //调用回原文件日志的实现
}
public String getLogType(){
return "file";
}
public void doXXX(){
//其他没有具体实现的接口.空实现
}
}
在代码中需要调用适配器时,如下
public void doWork(){
//业务逻辑....
//记录文件日志
FileLogInterface logger = new FileLogService();
LogInterface newLogger = new FileLogAdapter(logger);
newLogger.doLog();
}
本文到此结束