1.模式的定义
适配器模式(Adpater Pattern):将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
在软件开发中,系统的数据和行为都正确,但接口不符合时,我们应该考虑用适配器,目的是使控制范围之外的一个原有对象与某个接口匹配。适配器模式主要应用于希望复用一些现存的类,但接口又与复用环境要求不一致的情况。
2.模式的构成
适配器模式的角色构成
目标抽象类(Target):定义客户所需的接口,可以是一个抽象类或接口,也可以是具体类。
适配器类 (Adapter):作为一个转换器,对Adaptee和Target进行适配。把源接口转换成目标接口。
适配者类 (Adaptee):被适配的角色,它定义了一个已经存在的接口,这个接口需要适配。
3.模式的实现
适配器模式分为类适配器模式和对象适配器模式
目标抽象类 Target,java
public interface Target {
/**
* 这是源类Adaptee也有的方法
*/
public void sampleOperation1();
/**
* 这是源类Adapteee没有的方法
*/
public void sampleOperation2();
}
适配者 Adaptee.java
public class Adaptee {
public void sampleOperation1(){}
}
适配器 Adapter.java —— 类适配器模式
public class Adapter extends Adaptee implements Target {
/**
* 由于源类Adaptee没有方法sampleOperation2()
* 因此适配器补充上这个方法
*/
@Override
public void sampleOperation2() {
//写相关的代码
}
}
适配器 Adapter.java —— 对象适配器模式
public class Adapter extends Adaptee implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee){
this.adaptee = adaptee;
}
/**
* 源类Adaptee有方法sampleOperation1
* 因此适配器类直接委派即可
*/
public void sampleOperation1(){
this.adaptee.sampleOperation1();
}
/**
* 源类Adaptee没有方法sampleOperation2
* 因此由适配器类需要补充此方法
*/
public void sampleOperation2(){
//写相关的代码
}
}
(声明:本文为个人学习笔记,观点非原创。如有问题,欢迎讨论。)