1、 模式的结构
适配器模式(Adapter)将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作,包含以下主要角色。
- 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
- 适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。
- 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。
2、举例
目标(Target)接口,可以是抽象类和接口,这里用了抽象类
/**
* @author 作者:ILove996
* @version 创建时间:2020年6月28日 上午9:28:29 类说明
*/
public abstract class Print {
public abstract void printWeak();
public abstract void printStrong();
}
适配者(Adaptee),该类包含了实现程序功能的逻辑,但是该类的接口和使用者(叫客户端也行)预期的接口不兼容,所以呢就要找一个目标接口,并写一个持有适配者引用且实现了目标接口的类(也就是适配器)来达到预期。
/**
* @author 作者:ILove996
* @version 创建时间:2020年6月24日 下午2:23:35 类说明
*/
public class Banner {
private String string;
public Banner(String string) {
this.string = string;
}
public void showWithParen() {
System.out.println("showWithParen: (" + string + ")");
}
public void showWithAster() {
System.out.println("showWithAster: *" + string + "*");
}
}
适配器(Adapter),持有适配者的引用并且实现了目标接口,使用时会用这个类创建对象,用目标接口做引用来使用。
/**
* @author 作者:ILove996
* @version 创建时间:2020年6月28日 上午9:31:10 类说明
*/
public class PrintBanner extends Print {
private Banner banner;
public PrintBanner(String string) {
this.banner = new Banner(string);
}
@Override
public void printWeak() {
banner.showWithAster();
}
@Override
public void printStrong() {
banner.showWithParen();
}
}
测试代码:
/**
* @author 作者:ILove996
* @version 创建时间:2020年6月24日 下午2:33:42 类说明
*/
public class Main {
public static void main(String[] args) {
Print p = new PrintBanner("hello");
p.printStrong();
p.printWeak();
}
}
运行结果: