一、适配器模式的定义
Convert the interface of a class into another interface clients expect.Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.(将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。)
二、适配器模式的应用
1、适配器模式的优点
适配器模式可以让两个没有任何关系的类在一起运行,只要适配器这个角色能够搞定他们就成。
增加了类的透明性,提高了类的复用度 灵活性非常好
2、适配器模式的缺点
与类适配器模式相比,要想置换适配者类的方法就不容易
3.适配器模式的使用场景。
适配器应用的场景只要记住一点就足够了:你有动机修改一个已经投产中的接口时,适配器模式可能是最适合你的模式。比如系统扩展了,需要使用一个已有或新建立的类,但这个类又不符合系统的接口
三、适配器模式的实现
public interface IUserInfo {
//获取名字
public String getNameById(Integer id);
//根据名字获取地址
public String getAddressBydName(String name);
}
public interface IUserInfo {
//获取名字
public String getNameById(Integer id);
//根据名字获取地址
public String getAddressBydName(String name);
}
public interface OutUserInfo {
//根据id获取用户名
public Map<String, String> getNameById(String id);
//根据用户名获取地址
public Map<String, String> getAddressByName(String name);
}
public interface OutUserInfo {
//根据id获取用户名
public Map<String, String> getNameById(String id);
//根据用户名获取地址
public Map<String, String> getAddressByName(String name);
}
public class UserInfoAdapter extends OutUserInfoimpl implements IUserInfo{
@Override
public String getNameById(Integer id) {
//转换适配
Map<String, String> map=super.getNameById(String.valueOf(id));
//获取名字
String name=map.get(String.valueOf(id));
return name;
}
@Override
public String getAddressBydName(String name) {
//转换适配
Map<String, String> map=super.getAddressByName(name);
//获取地址
String address=map.get(name);
return address;
}
}
四、适配器模式在源码中的应用
Android源码中的适配器模式,典型的就是ListView、GridVIew、RecyclerView