网站模板建站教程视频网络营销百度百科
什么是适配器设计模式
可将接口进行转换以适应不同需求
上图理解
适用场景
mybatis日志框架
新老版本接口的兼容
适配器模式角色划分
源(Adaptee):需要被适配的对象或类型。
适配器(Adapter):连接目标和源的中间对象,相当于转换器。
目标(Target):期待得到的目标。
原理图
实现
-
模拟新老版本接口兼容
public class ListAdapter extends HashMap {private List list;public ListAdapter(List list) {this.list = list;}@Overridepublic int size() {return list.size();}@Overridepublic Object get(Object key) {return list.get(Integer.valueOf(key.toString()).intValue());}static class OrderServer {//原有接口为Mappublic static void froOrderMap(Map map) {for (int i = 0; i < map.size(); i++) {// 使用I作为MapKey获取数据String value = (String) map.get(i);System.out.println("value:" + value);}}}public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("a");list.add("b");//现模拟前端传入的对象为ListListAdapter listAdapter = new ListAdapter(list);ListAdapter.OrderServer.froOrderMap(listAdapter);}}
-
模拟mybatis Log
Log
/*** log adaptee source* @author administrator*/
public interface Log {public void info();
}
BaseImpl
/*** base log,it's also base_log target* @author administrator*/public class BaseImpl implements Log{@Overridepublic void info() {System.out.println("this is base log");}}
Log4jAdapter
/*** log4j adapter* @author administrator*/public class Log4jAdapter implements Log{private Log log;public Log4jAdapter(Log log) {this.log = log;}/*** log4j impl ,it's also log4j target* pass target to adapter*/@Overridepublic void info() {//base loglog.info();//log4j logSystem.out.println("this is log4j log");}public static void main(String[] args) {new Log4jAdapter(new BaseImpl()).info();}}
Slf4jAdapter
/*** slf4j adapter** @author administrator*/public class Slf4jAdapter implements Log {private Log log;public Slf4jAdapter(Log log) {this.log = log;}/*** slf4j impl ,it's also slf4j target* pass target to adapter*/@Overridepublic void info() {//base loglog.info();//slf4j logSystem.out.println("this is slf4j log");}public static void main(String[] args) {new Slf4jAdapter(new BaseImpl()).info();}}
思想来源