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

    描述

    适配器的理解很简单,举个例子:我们都见过存储卡,一般手机都可以装上存储卡,手机可以对存储卡直接读写,但是如果想用电脑读写存储卡呢?那就需要一个媒介---卡托,把存储卡插在卡托上,卡托上有个USB的数据口,而所有电脑都支持USB口,这样就可以用电脑读写存储卡内容了。卡托这个神器就是一种适配器。适配器是两个不兼容实体之间的转换器。适配器模式是一种结构模式。

    适配器模式比较官方的概念是:是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

    例子

    假设有两个播放器AudioPlayer和VideoPlayer,其中AudioPlayer能够播放所有音频文件(如.mp3),VideoPlayer能播放所有视频文件(如.mp4)。但是如果在AudioPlayer中输入一个.mp4的文件,它是不能识别不能播放的,同理,在VideoPlayer中放入.mp3文件也是不可以识别的。

    现在我们通过适配器模式,实现一个基于AudioPlayer和VideoPlayer适配器,我们把一个文件放入适配器中,不论是音频还是视频,都可以正常播放。

    interface Player {
       public void play(String type, String fileName);
    }
    interface AudioPlayer {  
       public void playAudio(String fileName);
    }
    interface VideoPlayer {  
       public void playVideo(String fileName);
    }
    class MyAudioPlayer implements AudioPlayer {
       @Override
       public void playAudio(String fileName) {
          System.out.println("Playing. Name: "+ fileName);    
       }
    }
    class MyVideoPlayer implements VideoPlayer {
       @Override
       public void playVideo(String fileName) {
          System.out.println("Playing. Name: "+ fileName);    
       }
    }
    
    class MyPlayer implements Player {
    
       AudioPlayer audioPlayer = new MyAudioPlayer();
       VideoPlayer videoPlayer = new MyVideoPlayer();
       
       public MyPlayer(){      
       }
       @Override
       public void play(String audioType, String fileName) {
          if(audioType.equalsIgnoreCase("avi")){
             videoPlayer.playVideo(fileName);
          }else if(audioType.equalsIgnoreCase("mp3")){
             audioPlayer.playAudio(fileName);
          }
       }
    }
    public class Main{
       public static void main(String[] args) {
          MyPlayer myPlayer = new MyPlayer();
    
          myPlayer.play("mp3", "h.mp3");
          myPlayer.play("avi", "me.avi");
       }
    }
    

    输出结果:

    Playing. Name: h.mp3

    Playing. Name: me.avi

  • 相关阅读:
    使用littleTools简化docker/kubectl的命令
    (上)python3 selenium3 从框架实现学习selenium让你事半功倍
    一篇文教你使用python Turtle库画出“精美碎花小清新风格树”快来拿代码!
    VxLAN协议详解
    深入理解大数据之——事务及其ACID特性
    深入理解大数据架构之——Lambda架构
    JQCloud: 一个前端生成美化标签云的简单JQuery插件
    详解Java中的final关键字
    OpenDaylight虚拟租户网络(VTN)详解及开发环境搭建
    使用Pelican在Github(国外线路访问)和Coding(国内线路访问)同步托管博客
  • 原文地址:https://www.cnblogs.com/K-artorias/p/7880186.html
Copyright © 2011-2022 走看看