适配器(Adaptor)是大家日常生活中基本上天天要接触的。 电脑, 笔记本, 手机等等接上电源就得用到适配器。
那适配器是用来干什么的呢? 适配器就是将一个接口或类转换为另一个接口或类。
现在很多网站都和腾讯,新浪等合作, 比如通过QQ号或微波就可以直接登录原来的网站。
那这里面就肯定存在一个用户信息的转换过程。 因为两个不同的公司对用户信息的设计完全一样的可能性几乎等于中双色球头奖。。。 那么我们的Adaptor就可以大打出手了。
先看看我们假定的两个用户信息接口/类
public interface SinaUserInfo {
String getAddress(String userName);
String getBirthday(String userName);
}
public interface TecentUserInfo {
public TecentUser getUsesrInfo(String userName);
}
其实现类
public class SinaBlogUser implements SinaUserInfo {
@Override
public String getAddress(String userName) {
System.out.println("从sina数据库中查找address");
return userName + "'Sina Address1";
}
@Override
public String getBirthday(String userName) {
System.out.println("从sina数据库中查找birthday");
return userName + "'Sina Birthday1";
}
}
public class TecentQQUser implements TecentUserInfo {
@Override
public TecentUser getUsesrInfo(String userName) {
System.out.println("从tecent数据库中查找QQ user info");
return new TecentUser(userName, "HZ, China", "2011-10-10");
}
}
现在引入Adaptor
public class UserAdaptor extends TecentQQUser implements SinaUserInfo {
@Override
public String getAddress(String userName) {
return super.getUsesrInfo(userName).getAddress();
}
@Override
public String getBirthday(String userName) {
return super.getUsesrInfo(userName).getBirthday();
}
}
好了, 先看看没有Adaptor的时候只取SinaBlog的用户信息
public class Client {
public static void main(String[] args) {
String userName = "小三";
SinaUserInfo user = new SinaBlogUser();
String address = user.getAddress(userName);
System.out.println("Address = " + address);
String birthday = user.getBirthday(userName);
System.out.println("Birthday = " + birthday);
}
}
执行结果:
引用
从sina数据库中查找address
Address = 小三'Sina Address1
从sina数据库中查找birthday
Birthday = 小三'Sina Birthday1
好啦, 先在看看怎样去找TecentQQ的用户信息
public class Client {
public static void main(String[] args) {
String userName = "小三";
// 唯一该的就是把SinaBlogUser -> UserAdaptor
SinaUserInfo user = new UserAdaptor();
String address = user.getAddress(userName);
System.out.println("Address = " + address);
String birthday = user.getBirthday(userName);
System.out.println("Birthday = " + birthday);
}
}
那看看执行结果有什么区别呢
引用
从tecent数据库中查找QQ user info
Address = HZ, China
从tecent数据库中查找QQ user info
Birthday = 2011-10-10
分享到:
相关推荐
适配器模式的Java实现版本,包含类适配器模式和对象适配器模式的实现,同时也包含两者的UML类图
java设计模式【之】适配器模式【源码】【场景:水和容器】 * 适配器模式,类似(亡羊补牢) * 已经存在的类(功能已经开发完成了),与新需求的功能相似,但是略有差异 * 当已经存在的方法无法满足现有需求,需要...
C#设计模式之适配器模式应用实例
设计模式之适配器模式Java版 设计模式之适配器模式Java版 设计模式之适配器模式Java版 设计模式之适配器模式Java版
[刚刚上传的demo运行有问题,重新传了个新的],这个的一个iOS的适配器模式的实例代码,目前就是一个简单的demo,后期还会更新适配器在 MVC,MVP,MVVM中的使用,demo对应着简书:https://www.jianshu.com/p/e2ebcf19098f,...
实验7 适配器模式、外观模式与模板方法模式---Java设计模式
动态代理模式 适配器模式 实现,都可以运行,有一部分注解
设计模式之适配器模式,通过实际例子讲述适配器模式的使用,原理和特点
适配器模式代码demo 适配器模式代码demo 适配器模式代码demo
适配器模式 设计模式 Adapter 还请各位大S指教
设计模式-适配器模式(讲解及其实现代码)
设计模式--适配器模式java例子
设计模式C++学习之适配器模式(Adapter)
实验七:适配器模式.rar实验七:适配器模式.rar
设计模式的适配器模式的例子,希望对大家有用
设计模式系列之适配器模式,分别以Java,Android,IOS进行讨论