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));
          }
      }
  • 相关阅读:
    HDU 5313 bitset优化背包
    bzoj 2595 斯坦纳树
    COJ 1287 求匹配串在模式串中出现的次数
    HDU 5381 The sum of gcd
    POJ 1739
    HDU 3377 插头dp
    HDU 1693 二进制表示的简单插头dp
    HDU 5353
    URAL 1519 基础插头DP
    UVA 10294 等价类计数
  • 原文地址:https://www.cnblogs.com/guanbin-529/p/11320710.html
Copyright © 2011-2022 走看看