适配器模式:将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
应用场景:
1、系统需要使用现有的类,而现有的类不符合当前系统的要求
2、系统要建立一个可以重复使用的类,用来与彼此没有太大关联的类或者在将来要引用的类一起工作
问题引出:
新买的手机自带的耳机是2.5接口的,不幸的是有一天你的耳机坏了,但市面上已经找不到2.5接口的耳机了,全部是3.5的,老板告诉你,需要用一个转换器,(适配器),3.5接口的耳机就可以使用了。
适配器模式分类:
1、类的适配器模式(采用继承实现)
2、对象的适配器模式(采用对象组合方式实现)
目标抽象角色:(Target)定义客户所期待的要使用的接口,我们把手机当成客户端,客户端所需要使用的耳机的接口是2.5的,在这里就可以抽象出来一个2.5接口的设备
源角色:(Adaptee)需要被适配的接口,在这里指我们从市面上买回来的那个3.5接口的耳机
适配器角色(Adapter):用来把源接口转换成符合要求的目标接口的设备,在这里指那个“转换器”
客户端:就指手机
示例代码:
Target类:目标抽象角色
public interface Targer {
void provider2_5();
}
Adaptee 类 源角色
public class Adaptee {
public void provider3_5() {
System.out.println("我是一个3.5接口的耳机");
}
}
Adapter 类 适配器角色
public class Adapter extends Adaptee implements Targer {
@Override
public void provider2_5() {
// TODO Auto-generated method stub
this.provider3_5();
}
}
Client 类 客户端
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Targer targer = new Adapter();
targer.provider2_5();
}
}
ps:将原角色中的
provider3_5()方法设为私有,更容易理解这种模式的好处
这样的话,要使用该方法,必须继承3.5接口的类,而对于客户端来说,(已经完成,不适合做大幅度修改),
原先 Target target= new 2.5();现在不使用2.5,而是复用已经存在的3.5,这时候只有这么做比较合适了