• 适配器模式


    描述

    适配器的理解很简单,举个例子:我们都见过存储卡,一般手机都可以装上存储卡,手机可以对存储卡直接读写,但是如果想用电脑读写存储卡呢?那就需要一个媒介---卡托,把存储卡插在卡托上,卡托上有个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

  • 相关阅读:
    面向对象并不是必要的
    linq 总结
    垃圾自动回收的一个方案
    随手记 手机软件的不足,和开发自己理财软件的想法
    以人的角度去解决问题
    浮点数比较
    集中原则——软件设计之道
    云在何方
    我遇到了DLL地狱
    在C#.net中如何操作XML
  • 原文地址:https://www.cnblogs.com/K-artorias/p/7880186.html
Copyright © 2020-2023  润新知