23种设计模式之适配器模式(Adapter Pattern)
基本概念
适配器模式(Adapter Pattern)属于结构型设计模式,它的作用是将一个类的接口转换成客户希望的另外一个接口。适配器让原本由于接口不兼容而不能一起工作的类可以协同工作。
结构组成
配器模式包括三个角色:目标抽象类(Target)、适配器类(Adapter)和被适配者类(Adaptee)
- 目标抽象类(Target):定义了客户端使用的与特定领域相关的接口,也就是客户端需要的方法。
- 适配器类(Adapter):通过继承或者组合方式,将被适配者类的接口与目标抽象类的接口转换起来,使得客户端可以按照目标抽象类的接口进行操作。
- 被适配者类(Adaptee):已经存在的、功能稳定的类,在这里指的是需要适配的类。
两种实现方式
-
类适配器模式:通过继承来实现适配器功能;
-
对象适配器模式:通过组合来实现适配器功能。
适配器模式在实际开发中非常常见,比如我们经常需要连接各种不同的数据库,每种数据库都有自己独特的接口和方法。
如果我们希望写出一段通用的代码,能够连接到任何一种数据库并执行相同的操作,那么适配器模式就非常适合解决这个问题。
小栗子
类适配器模式
我们实现将220V电压转换成5V电压的功能。
目标接口
/**
* @Classname Voltage5V
* @Description TODO 目标接口
* @Date 2023/7/25 09:05
* @Created by wangxianlin
*/
public interface Voltage5V {
int output5V();
}
源接口
/**
* @Classname Voltage220V
* @Description TODO 源接口
* @Date 2023/7/25 09:05
* @Created by wangxianlin
*/
public class Voltage220V {
public int output220V() {
return 220;
}
}
适配器类
/**
* @Classname VoltageAdapter
* @Description TODO 适配器类
* @Date 2023/7/25 09:06
* @Created by wangxianlin
*/
public class VoltageAdapter extends Voltage220V implements Voltage5V{
@Override
public int output5V() {
int src = output220V();
System.out.println("原始电压:" + src + "V");
int dst = src / 44; // 将220V电压转换成5V电压
System.out.println("转换后电压:" + dst + "V");
return dst;
}
}
客户端代码
/**
* @Classname Client
* @Description TODO 客户端代码
* @Date 2023/7/25 09:06
* @Created by wangxianlin
*/
public class Client {
public static void main(String[] args) {
Voltage5V adapter = new VoltageAdapter();
int output5V = adapter.output5V();
System.out.println("输出电压:" + output5V + "V");
}
}
原始电压:220V
转换后电压:5V
输出电压:5V
在上面的示例代码中,我们首先定义了目标接口Voltage5V和源接口Voltage220V,其中Voltage220V代表原始的220V电压。
对象适配器模式
介绍:
- (1)基本思路和类的适配器模式相同,只是将Adapter类作修改,不是继承src而是持有src类的实例,以解决兼容性的问题。
- (2)根据 “合成复用原则” ,在系统中尽量使用关联关系来替代继承关系。
适配器类
/**
* @Classname VoltageAdapter
* @Description TODO 对象适配器模式-适配器类
* @Date 2023/7/25 09:06
* @Created by wangxianlin
*/
public class VoltageAdapterNew implements Voltage5V{
private Voltage220V voltage220V;
public VoltageAdapterNew(Voltage220V voltage220V) {
super();
this.voltage220V = voltage220V;
}
@Override
public int output5V() {
int src = voltage220V.output220V();
System.out.println("原始电压:" + src + "V");
int dst = src / 44; // 将220V电压转换成5V电压
System.out.println("转换后电压:" + dst + "V");
return dst;
}
}
客户端文章来源:https://www.toymoban.com/news/detail-611439.html
/**
* @Classname Client
* @Description TODO 客户端代码
* @Date 2023/7/25 09:06
* @Created by wangxianlin
*/
public class Client {
public static void main(String[] args) {
Voltage5V adapter = new VoltageAdapterNew(new Voltage220V());
int output5V = adapter.output5V();
System.out.println("输出电压:" + output5V + "V");
}
}
输出结果文章来源地址https://www.toymoban.com/news/detail-611439.html
原始电压:220V
转换后电压:5V
输出电压:5V
到了这里,关于【设计模式】适配器模式(Adapter Pattern)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!