一、定义:
Adapter Pattern,把一个类的接口变换成客户端所期待的另一种接口,从而使原本因为接口不匹配而无法在一起工作的两个类能够在一起工作。
二、适配器模式的两种方式:
类的适配器模式和对象适配器模式。
三、类的适配器模式:
1、静态结构图:如图1所示
图1:类的适配器模式静态结构图
1、模式涉及的角色:
a) 目标(Target)角色:这个就是类所期待的接口。
b) 源角色(Adpatee):现有适配的接口
c) 适配器(adpatee)角色:适配器类是本模式的核心,适配器类将源接口转换成目标接口,显然这一角色不可以是接口,必须是具体的类。
3、类适配器模式的语法定义:
a) 代码清单1:Target的源代码
package cn.javaworker.yeming.pattern;
public interface Target {
/**
* 这个是源类也有的方法
*/
void sampleOperation1();
/**
* 这个是目标类具有的方法
*/
void sampleOperation2();
}
b) Adaptee源代码
package cn.javaworker.yeming.pattern;
public class Adpatee {
/**
* 源类里有一个sampleOperation1()方法
*/
void sampleOperation1() {};
}
c) 适配器角色Adapter的源代码
package cn.javaworker.yeming.pattern;
public class Adapter extends Adaptee implements Target {
/**
* 由于源方法没有sampleOperation2,因此在适配器补充这个方法
*/
@Override
public void sampleOperation2() {}
}
四、类的适配器模式:
1、与类的适配器一样,对象的适配器模式把被适配的类的API转换成目标类的API,不同,对象的适配器不是使用集成,而是使用委派关系连接到Adaptee类。
如图2:对象适配器模式的静态结构图:
图2:对象适配器模式的静态结构图
2、从上图可以看出,模式所涉及的角色:
Ø 目标(Target)角色:这个就是系统所期待的接口
Ø 源(Adaptee)角色:现在需要适配器的接口
Ø 适配器(Adapter)角色:适配器类是本模式的核心,适配器时将源接口转换成目标接口。
3、模式的示例源代码:
a) 类Target类的源代码
package cn.javaworker.yeming.pattern;
public interface Target {
/**
* 这个是源类也有的方法
*/
void sampleOperation1();
/**
* 这个是目标类具有的方法
*/
void sampleOperation2();
}
b)
Adaptee源代码
package cn.javaworker.yeming.pattern;
public class Adpatee {
/**
* 源类里有一个sampleOperation1()方法
*/
public void sampleOperation1() {};
}
c) Adapter源代码
package cn.javaworker.yeming.pattern.duxiag;
public class Adapter implements Target{
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
/**
* 源类中有有方法sampleOperation1(),
* 因此适配器直接委派即可
*/
@Override
public void sampleOperation1() {
adaptee.sampleOperation1();
}
/**
* 源类中没有这个方法sampleOperation2();
* 因此没有适配器类需要补充此方法
*/
@Override
public void sampleOperation2() {}
}