zoukankan      html  css  js  c++  java
  • 设计模式-适配器模式

    适配器模式

    • 主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。
    • 应用实例: 1、美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V。 2、JAVA JDK 1.1 提供了 Enumeration 接口,而在 1.2 中提供了 Iterator 接口,想要使用 1.2 的 JDK,则要将以前系统的 Enumeration 接口转化为 Iterator 接口,这时就需要适配器模式。 3、在 LINUX 上运行 WINDOWS 程序。 4、JAVA 中的 jdbc。

    下面以电脑读取SD卡为例

    1. 创建SD卡接口
      package com.design.demo.adapter;
      
      /**
       * @author: GuanBin
       * @date: Created in 下午4:43 2019/8/7
       */
      public interface SDCard {
          /**
           * 读取SD卡方法
           *
           * @return
           */
          String readSD();
      
          /**
           * 写入SD卡功能
           * @param msg
           * @return
           */
          int writeSD(String msg);
      }
    2. 创建SD卡实现类
      package com.design.demo.adapter;
      
      /**
       * @author: GuanBin
       * @date: Created in 下午4:45 2019/8/7
       */
      public class SDCardImpl implements SDCard {
      
          @Override
          public String readSD() {
              String msg="sdcard read a msg : Hello word sd";
              return msg;
          }
      
          @Override
          public int writeSD(String msg) {
              System.out.println("sd card write msg:" + msg);
              return 1;
          }
      }
    3. 创建TFCard接口
      package com.design.demo.adapter;
      
      /**
       * @author: GuanBin
       * @date: Created in 下午5:12 2019/8/7
       */
      public interface TFCard {
      
         String readTF();
      
         int writeTF(String msg);
      }
    4. 创建TFCard实现类
      package com.design.demo.adapter;
      
      /**
       * @author: GuanBin
       * @date: Created in 下午5:15 2019/8/7
       */
      public class TFCardImpl implements TFCard {
      
          @Override
          public String readTF() {
              String msg ="tf card reade msg : hello word tf card";
              return msg;
          }
      
          @Override
          public int writeTF(String msg) {
              System.out.println("tf card write a msg : " + msg);
              return 1;
          }
      }
    5. 创建SDAdapterTF适配器(实现SD卡的接口,但最终实现是调用TFCard的接口)
      package com.design.demo.adapter;
      
      /**
       * @author: GuanBin
       * @date: Created in 上午10:45 2019/8/8
       */
      public class SDAdapterTF implements SDCard {
      
          private TFCard tfCard;
      
          public SDAdapterTF(TFCard tfCard) {
              this.tfCard = tfCard;
          }
      
          /**
           * 读取TF卡也走SDCard的readSD方法,但是具体实现仍然走的是TFCard的readTF方法
           * @return
           */
          @Override
          public String readSD() {
              System.out.println("adapter read tf card");
              return tfCard.readTF();
          }
      
          @Override
          public int writeSD(String msg) {
              System.out.println("adapter write tf card");
              return tfCard.writeTF(msg);
          }
      }
    6. 创建Computer接口
      package com.design.demo.adapter;
      
      /**
       * @author: GuanBin
       * @date: Created in 下午4:52 2019/8/7
       */
      public interface Computer {
      
          /**
           * 读取sd卡
           * @param sdCard
           * @return
           */
          String readSD(SDCard sdCard);
      }
    7. 创建ThinkpadComputer并实现Computer接口
      package com.design.demo.adapter;
      
      /**
       * @author: GuanBin
       * @date: Created in 下午4:53 2019/8/7
       */
      public class ThinkpadComputer implements Computer {
          @Override
          public String readSD(SDCard sdCard) {
              if(sdCard == null){
                  throw new NullPointerException("sd card null");
              }
              return sdCard.readSD();
          }
      }
    8. 创建Demo类
      package com.design.demo.adapter;
      
      /**
       * @author: GuanBin
       * @date: Created in 下午5:04 2019/8/7
       */
      public class ComputerReadDemo {
      
          public static void main(String[] args) {
              Computer computer = new ThinkpadComputer();
              SDCardImpl sdCard = new SDCardImpl();
              System.out.println(computer.readSD(sdCard));
              System.out.println("=========================");
              TFCardImpl tfCard = new TFCardImpl();
              SDAdapterTF sdAdapterTF = new SDAdapterTF(tfCard);
              System.out.println(computer.readSD(sdAdapterTF));
          }
      }
  • 相关阅读:
    JPA-基本注解
    响应式、自适应式
    Spring boot传值注意事项
    Angular与Vue
    Java 时间转换
    SpringBoot 上传读取图片 巨坑
    前后端分离之 文件上传
    System.nanoTime与System.currentTimeMillis
    sqlserver 新增子段有默认值
    json转换
  • 原文地址:https://www.cnblogs.com/guanbin-529/p/11320710.html
Copyright © 2011-2022 走看看