引子
适配器模式,故名思义,就是就是通过适配器类,把两个不符合幸好的类或者借口可以进行组合在一起。举个例子:假如我们以有一个系统,我们希望它能和一个新的厂商类搭配使用,但是新厂商设计出来的借口,不同于旧的厂商的借口:
所以我们可以加入一个适配器:
这样我们不需要改变原来的代码,只要新增适配器的代码,即可。
例子
//自行车接口,只会走的自行车
public interface Bycle {
void walk();
}
//汽车接口,会跑
public interface Car {
void run();
}
//买的起自行车
public class MyBycle implements Bycle{
public void walk(){
System.out.println("mybylce walk");
}
}
public class Test {
public static void main(String[] args) {
//我们有一辆自行车
MyBycle bycle=new MyBycle();
//但是,我需要一辆汽车
Car car=null;
dirver(car);
}
private static void dirver(Car car) {
car.run();
}
}
加入适配器:
//集成要实现的类的接口
public class MyBycle2Car implements Car{
//首先我们要把自行车导入进来
Bycle bycle;
public MyBycle2Car(Bycle bycle){
this.bycle=bycle;
}
//要实现汽车的跑
@Override
public void run() {
//汽车走5次就和汽车一样了
for(int i=0;i<5;i++){
bycle.walk();
}
}
}
//这时候我们可以用我们的是适配器类把我们的自行车装饰成汽车
public class Test {
public static void main(String[] args) {
//我们有一辆自行车
MyBycle bycle=new MyBycle();
//但是,我需要一辆汽车
Car car=new MyBycle2Car(bycle);
dirver(car);
}
private static void dirver(Car car) {
car.run();
}
}
客户使用适配器的过程如下:
1.客户通过目标接口使用适配器的方法对适配器发出请求
2.时平日期的使用被适配器的借口把请求转换成被适配者的一个或者多个借口调用
3.客户接收到调用的结果,但并未察觉这一切是适配器在起转换作用。
定义
将一个类的借口,转换成客户期望的另一个借口。适配器让原本接口不兼容的类可以合作无间。
注意
适配器有两种:类适配器和对象适配器。我们上述讲述的就是对象适配器,使用组合的方式实现。还有一种类适配器,需要进行多继承,要同时继承被适配器类和对象类,这在java里使无法实现的,但在可以多继承的语言里可以实现。