一、概述
定义:适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。
意图:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的
如何解决:继承或依赖(推荐)。
关键代码:适配器继承或依赖已有的对象,实现想要的目标接口。
二、适配器模式
适配器模式里有三种角色:
- 需要被适配的类、对象和接口(已知的):Adaptee
- 最终想要得到的:Target
- 适配器:Adapter
适配器可以分为三种:类适配器模式、对象适配器模式、接口适配器模式
1.类适配器模式
在Java中不可能实现,因为它要求多重继承。
它与对象适配器的差别是类适配器继承了Target和Adaptee。而对象适配器利用组合的方式将请求传送给被适配者。
2.对象适配器模式
目标接口:
public interface Target {
void RMB();
}
被适配者接口:
public interface Adaptee {
void Dollar();
}
被适配者接口的实现类:
public class AdapteeImpl implements Adaptee {
@Override
public void Dollar() {
System.out.println("我用的是dollar");
}
}
Adapter适配器类:
public class Adapter implements Target {
Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void RMB() {
System.out.println("我以为自己用的是人民币");
adaptee.Dollar();
}
}
测试类:
public class MainTest {
public static void main(String[] args) {
Adaptee adaptee=new AdapteeImpl();
Target adapter =new Adapter(adaptee);
adapter.RMB();
}
}
3.接口适配器模式
好处:它解决接口与接口实现类之间继承矛盾问题,当我们不需要实现类全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可有选择地覆盖父类的某些方法来实现需求,它适用于一个接口不想使用其所有的方法的情况。
- 使用抽象类分离了接口与接口实现
- 抽象类分摊接口中需要常用的方法
- 使得接口实现类像逛超市一样,可以随意选择接口中的方法来实现