适配器模式

适配器模式主要是作为两个不兼容接口之间的桥梁。我们现在假设有英国人,中国人,他们之间语言不通,中国人说汉语,英国人说英语,现在英国人要和中国人说话,怎么才能解决这个问题?这时适配器模式就可以派上用场了,我们可以在中国人和英国人之间放一个适配器(类似于翻译的意思),这样就可以实现中国人和英国人说话的功能。

这里我们只需要将英语翻译成汉语即可。此时英语类似于客户,汉语类似于目标。

/*
 * 英语接口(客户)
 */
public interface EnglandPerson {
	
	public void sayEnglish();
	public void canSay();

}
/*
 * 汉语接口(目标接口)
 */
public interface ChinesePerson {
	
	public void sayChinese();
	
	public void canSay();

}
/*
 * 汉语接口实例(目标接口实例)
 */
public class PojoChinesePerson implements ChinesePerson {

	@Override
	public void sayChinese() {
		System.out.println("中国人说中国话");

	}

	@Override
	public void canSay() {
		System.out.println("中国人会说话");
	}

}
/*
 * 英语接口实例(客户接口实例)
 */
public class PojoEnglandPerson implements EnglandPerson {

	@Override
	public void sayEnglish() {
		System.out.println("英国人说英语");
	}

	@Override
	public void canSay() {
		System.out.println("英国人会说话");
	}

}
/*
 * 汉语适配器实现了被适配者汉语接口(目标接口)
 */
public class ChineseAdapter implements ChinesePerson {

	private EnglandPerson ep;
	
	public ChineseAdapter(EnglandPerson ep) {
		this.ep = ep;
	}
	
	@Override
	public void sayChinese() {
		ep.sayEnglish();
		
	}

	@Override
	public void canSay() {
		ep.canSay();
		
	}	
}
public class Test {

	public static void main(String[] args) {
		
		//客户实例
		EnglandPerson ep = new PojoEnglandPerson();
		
		//将客户实例进行适配
		ChinesePerson ca = new ChineseAdapter(ep);
		
		
		//通过适配器客户实现目标所具有的功能
		ca.canSay();
		ca.sayChinese();

	}

}
其中最主要的在适配器中我们持有了一个客户的实例,从而实现了使用适配器来达到使用客户所具有的功能。
这里我们只实现的是单向适配(从英语到汉语)。如果需要双向适配的话,就要适配器就要实现客户和目标两个接口,这个以后再说吧。


阅读更多
个人分类: 设计模式
上一篇数组中只出现一次的两个数字
下一篇SpringMVC处理HTTP分发请求
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭