1、何谓适配器模式?
将一个类的接口转换成客户希望的另外一个接口。Adapter模式是的原本由于接口不能兼容而不能一起工作的那些类可以在一起工作。
2、主要解决的问题?
简单的说,你需要的东西就在你面前,但是你却不能使用,而短时间又无法改造它,于是我们就想办法适配它。
3、有东西不能用,又不能改造,想办法适配它?
意思就是使得一个东西适合另外一个东西。
举个例子:
假设现在你是一个老板,你要到美国谈生意,这份合同非常重要,但是你不会英语,但是对方也不会中文,这个时候,要你短时间之内学会英文是不可能的事,叫美国那边的老板学会中文也是不符合实际的,此时,最好的解决办法是什么,那就是找一个翻译,此时这个翻译你就可以理解为适配器。
在软件开发中也就是系统的数据和行为都正确,但接口不符合时,我们该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。
适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。
下面用个简单的案例来说明
先贴出uml
老板,上代码:
/**
*
* 被适配的类
* */
public class Adaptee {
public void request(){
System.out.println("可以完成客户的需求!");
}
}
/**
* 适配器类
* 通过适配器,我们可以让两个并不相关的类连接起来。
* 这是第一种适配的方式
* */
public class Adapter extends Adaptee implements Target{
public void execute() {
//将请求给目标接口的实现
super.request();
}
}
/**
*
* 目标接口
* */
public interface Target {
void execute();
}
public class Client {
public static void main(String[] args) {
Target t = new Adapter();
t.execute();
}
}
这是第一种适配的方式,通过继承加实现。
下面给出另外一种适配的方式:
public class Adapter2 implements Target{
private Adaptee a;
//把需要被适配的类注入进来
public Adapter2(Adaptee a) {
this.a = a;
}
public void execute() {
//调用方法
a.request();
}
}
测试一下:
public class Client {
public static void main(String[] args) {
Target t = new Adapter2(new Adaptee());
t.execute();
}
}
何时使用设计模式?
在想使用一个已经存在的类,但如果他的接口,也就是他的方法和你的要求不相同时,就应该考虑用适配器模式?
对的,两个类所做的事情相同或相似,但是具有不同的接口时要使用它。而且由于类都共享同一个接口,是的客户代码如何?
客户代码可以统一调用同一接口就行了,这样应该可以更简单,更能直接,更紧凑。
其实设计模式也是无奈之举,有点亡羊补牢的感觉,没办法呀,软件就有维护的额那一天,维护就可能因为不同的开发人员,不同的产品,不同厂家而造成功能类似而接口不同的情况,此时适配器模式就横空出世了。