`
huhu_long
  • 浏览: 69079 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

适配器模式

阅读更多
适配器(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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics