设计模式 -- 适配器模式

发布时间:2022-03-01 11:41:11 作者:yexindonglai@163.com 阅读(998)

 

适配器的定义

      首先我们先要了解一下什么是适配器,以及适配器能干什么。

下面的这2个东东大家都见过吧?是不是人手一个,不对,是每人都有好几个;这个东东就叫做电源适配器,在这个电源的内部经过了一层转换,把 市电220V(单位:伏)的交流电 转为手机能识别的 5V(单位:伏)直流电 ;

                    

我们在来看看下面这个东东,都见过吧,没错了,这就是type-c转耳机接口,因为我们的耳机大多都是3.5毫米直径的圆孔插口,但是现在大多手机都没这个接口了,所以要用耳机就得经过一层转换;

当然了,还有下面的这些东东都叫适配器;也叫转接器、转换器都可以;

 

适配器流程

说白了。适配器就是起到一个转换的作用,那么在程序的层面是如何转换的呢? 我们先看看转换过程的流程图

如图所示,客户是不能直接访问 B 的。Adapter是适配器,它将 B 转换成 客户  能访问的接口。所以通过适配器 Adapter 客户端就可以访问 B 了。

接下来,我们模拟一个适配器,中国的电源是220V的,日本的电源是110V的,所以日本的电器也是110V的,那么如果想要在中国使用日本的电器,就必须把中国的220V电源转为110V,才可使用日本电器,转换过程如下

用适配器的流程图来表示的话,就是这样的

 

用代码模式适配器模式

  1. package com.designPatterm.adapter;
  2. /**
  3. * 适配器模式
  4. */
  5. public class AdapterTest {
  6. public static void main(String[] args) {
  7. ChinaPower220V chinaPower = new ChinaPower220VImpl();
  8. // JapanElectric japanElectric = new JapanElectric(chinaPower); // 日本电器无法直接使用中国电源
  9. // 适配器初始化,将22v的电源传入适配器,在里面做转化
  10. AdapterPower adapterPower = new AdapterPower(chinaPower);
  11. // 日本电器使用转换后的适配器
  12. JapanElectric japanElectric = new JapanElectric(adapterPower);
  13. // 使用日本电器
  14. japanElectric.use();
  15. }
  16. }
  17. // 中国电源
  18. interface ChinaPower220V{
  19. // 使用电源
  20. void connect();
  21. }
  22. // 中国电源实现类
  23. class ChinaPower220VImpl implements ChinaPower220V{
  24. @Override
  25. public void connect() {
  26. System.out.println("使用中国电源 220V");
  27. }
  28. }
  29. // 日本电源
  30. interface JapanPower110V{
  31. void connect();
  32. }
  33. //日本电源实现类
  34. class JapanPower110VImpl implements JapanPower110V{
  35. @Override
  36. public void connect() {
  37. System.out.println("使用日本电源 110V");
  38. }
  39. }
  40. // 日本电器---这里也可以写成接口的形式,为了方便易读,就不写接口了
  41. class JapanElectric{
  42. private JapanPower110V japanPower110V;
  43. public JapanElectric(JapanPower110V japanPower110V){
  44. this.japanPower110V = japanPower110V;
  45. }
  46. // 使用日本电器
  47. void use(){
  48. // 这里用的是适配器类的connect方法,而适配器里面又用了中国电源的connect方法,属于间接使用中国电源,所以这里用的是中国电源的connect;
  49. japanPower110V.connect();
  50. convert();
  51. System.out.println("使用日本电器");
  52. }
  53. //转换电源的方法
  54. private void convert(){
  55. System.out.println("转换为110V电源");
  56. }
  57. }
  58. //电源适配器
  59. class AdapterPower implements JapanPower110V{
  60. private ChinaPower220V chinaPower220V;
  61. public AdapterPower(ChinaPower220V chinaPower220V){
  62. this.chinaPower220V = chinaPower220V;
  63. }
  64. @Override
  65. public void connect() {
  66. chinaPower220V.connect();
  67. }
  68. }

这个设计模式理解起来还是有些绕,对于一般人来说,太抽象了,但是我们只要知道适配是做转换的就行了,通俗点说的话,比如有A、B、C 三个类,A想要调用C就必须先经过B的转换,才能访问,在适配器里面的逻辑,其实就是把一个类的方法调用转成调另一个类的方法,

 

 

 

 

关键字设计模式