Java设计模式<适配器模式>
意图
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
场景
- 系统需要使用现有的类,而此类的接口不符合系统的需要
- 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口
- 通过接口转换,将一个类插入另一个类系中
实例
在多种数据库添加数据的时候,不同的数据库提供的API不同,比如MYSQL插入数据的用的是Insert方法,而在redis中添加数据API方法是set,而现有系统的上册代码统一为put,这是就需要将set和insert转换为put.
代码
上层API为
public interface DataPersitentService {
public int put(Object value);
}
mysql数据持久化的而的实现为
public class MysqlPersitent {
public int insert(Object val){
System.err.println(String.format("i am mysql ,and i have put the value [%s] into mysql successfully",val));
return 0;
}
mysql数据持久化的而的实现为
public class RedisPersitent {
public int set(Object val) {
System.err.println(String.format("i am redis ,and i have put the value [%s] into redis successfully",val));
return 0;
}
}
适配器为
public class Adapter implements DataPersitentService {
private final static MysqlPersitent mysqlPersitent = new MysqlPersitent();
private final static RedisPersitent redisPersitent = new RedisPersitent();
public int put(Object value) {
mysqlPersitent.insert(value);
redisPersitent.set(value);
return 0;
}
}
测试类为
public class DemoMain {
public static void main(String[] args) {
DataPersitentService dataPersitentServiceps = new Adapter();
dataPersitentServiceps.put("test data");
}
}
输出
i am mysql ,and i have put the value [test data] into mysql successfully
i am redis ,and i have put the value [test data] into redis successfully