设计模式 -- 适配器模式
Posted java叶新东老师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式 -- 适配器模式相关的知识,希望对你有一定的参考价值。
适配器的定义
首先我们先要了解一下什么是适配器,以及适配器能干什么。
下面的这2个东东大家都见过吧?是不是人手一个,不对,是每人都有好几个;这个东东就叫做电源适配器,在这个电源的内部经过了一层转换,把 市电220V(单位:伏)的交流电 转为手机能识别的 5V(单位:伏)直流电 ;
我们在来看看下面这个东东,都见过吧,没错了,这就是type-c转耳机接口,因为我们的耳机大多都是3.5毫米直径的圆孔插口,但是现在大多手机都没这个接口了,所以要用耳机就得经过一层转换;
当然了,还有下面的这些东东都叫适配器;也叫转接器、转换器都可以;
适配器流程
说白了。适配器就是起到一个转换的作用,那么在程序的层面是如何转换的呢? 我们先看看转换过程的流程图
如图所示,客户是不能直接访问 B 的。Adapter是适配器,它将 B 转换成 客户 能访问的接口。所以通过适配器 Adapter ,客户端就可以访问 B 了。
接下来,我们模拟一个适配器,中国的电源是220V的,日本的电源是110V的,所以日本的电器也是110V的,那么如果想要在中国使用日本的电器,就必须把中国的220V电源转为110V,才可使用日本电器,转换过程如下
用适配器的流程图来表示的话,就是这样的
用代码模式适配器模式
package com.designPatterm.adapter;
/**
* 适配器模式
*/
public class AdapterTest {
public static void main(String[] args) {
ChinaPower220V chinaPower = new ChinaPower220VImpl();
// JapanElectric japanElectric = new JapanElectric(chinaPower); // 日本电器无法直接使用中国电源
// 适配器初始化,将22v的电源传入适配器,在里面做转化
AdapterPower adapterPower = new AdapterPower(chinaPower);
// 日本电器使用转换后的适配器
JapanElectric japanElectric = new JapanElectric(adapterPower);
// 使用日本电器
japanElectric.use();
}
}
// 中国电源
interface ChinaPower220V{
// 使用电源
void connect();
}
// 中国电源实现类
class ChinaPower220VImpl implements ChinaPower220V{
@Override
public void connect() {
System.out.println("使用中国电源 220V");
}
}
// 日本电源
interface JapanPower110V{
void connect();
}
//日本电源实现类
class JapanPower110VImpl implements JapanPower110V{
@Override
public void connect() {
System.out.println("使用日本电源 110V");
}
}
// 日本电器---这里也可以写成接口的形式,为了方便易读,就不写接口了
class JapanElectric{
private JapanPower110V japanPower110V;
public JapanElectric(JapanPower110V japanPower110V){
this.japanPower110V = japanPower110V;
}
// 使用日本电器
void use(){
// 这里用的是适配器类的connect方法,而适配器里面又用了中国电源的connect方法,属于间接使用中国电源,所以这里用的是中国电源的connect;
japanPower110V.connect();
convert();
System.out.println("使用日本电器");
}
//转换电源的方法
private void convert(){
System.out.println("转换为110V电源");
}
}
//电源适配器
class AdapterPower implements JapanPower110V{
private ChinaPower220V chinaPower220V;
public AdapterPower(ChinaPower220V chinaPower220V){
this.chinaPower220V = chinaPower220V;
}
@Override
public void connect() {
chinaPower220V.connect();
}
}
这个设计模式理解起来还是有些绕,对于一般人来说,太抽象了,但是我们只要知道适配是做转换的就行了,通俗点说的话,比如有A、B、C 三个类,A想要调用C就必须先经过B的转换,才能访问,在适配器里面的逻辑,其实就是把一个类的方法调用转成调另一个类的方法,
以上是关于设计模式 -- 适配器模式的主要内容,如果未能解决你的问题,请参考以下文章