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

    首次接触适配器模式的就是操作数据库的  SqlDataAdapter 这就是典型适配器模式

     将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

    最简单的例子,我们电脑是3插头,但是墙上只有2插头,我们可以通过外插一个2转3的接头,让电脑的3插头插在这上面,这就是适配器的思想

    例子使用菜鸟教程

    默认情况下,AudioPlayer 可以播放 mp3 格式的音频文件,我们希望它也可以播放mp4与vlc等其他文件,为了实现这个功能,我们需要创建一个实现了 MediaPlayer 接口的适配器类 MediaAdapter,并使用 AdvancedMediaPlayer 对象来播放所需的格式。

      #region 接口
        interface MediaPlayer//调用者功能接口
        {
            void Play(string audioType,string fileName);
        }
        interface AdvancedMediaPlayer//具体功能接口
        {
             void playVlc(string fileName);
             void playMp4(string fileName);
        }
        #endregion
     #region 具体功能实现
        class VlcPlayer : AdvancedMediaPlayer
        {
            public void playMp4(string fileName)
            {
                //什么也不做
            }
    
            public void playVlc(string fileName)
            {
                Console.WriteLine("Playing vlc file. Name: " + fileName);
            }
        }
        class Mp4Player : AdvancedMediaPlayer
        {
            public void playMp4(string fileName)
            {
                Console.WriteLine("Playing mp4 file. Name: " + fileName);
            }
    
            public void playVlc(string fileName)
            {
                //什么也不做
            }
        }
        #endregion
     #region 创建实现了 MediaPlayer 接口的适配器类。
        class MediaAdapter : MediaPlayer
        {
            AdvancedMediaPlayer advancedmediaplayer;
            //private string _audioType;
            public MediaAdapter(string audioType)
            {
                //_audioType = audioType;
                if (audioType=="vlc")
                {
                    advancedmediaplayer = new VlcPlayer();
                }
                else if (audioType=="mp4")
                {
                    advancedmediaplayer = new Mp4Player();
                }
                else
                {
                    advancedmediaplayer = null;
                }
            }
            public void Play(string audioType,string fileName)
            {
                if (audioType == "vlc")
                {
                    advancedmediaplayer.playVlc(fileName);
                }
                else if (audioType == "mp4")
                {
                    advancedmediaplayer.playMp4(fileName);
                }
                else if(audioType == "mp3")
                {
                    Console.WriteLine("默认格式");
                }
                else
                {
                    Console.WriteLine("暂不支持该格式");
                }
            }
        }
        #endregion
      #region 创建实现了 MediaPlayer 接口的实体类
        public class AudioPlayer : MediaPlayer
        {
            private MediaAdapter mediaadapter;
    
            public void Play(string audioType, string fileName)
            {
                mediaadapter = new MediaAdapter(audioType);
                mediaadapter.Play(audioType,fileName);
            }
        }
        #endregion
    static void Main(string[] args)
            {
                //应用AudioPlayer调用适配器,完成适配
                AudioPlayer audioplayer = new AudioPlayer();
                audioplayer.Play("mp4","小酒窝mv*");
                audioplayer.Play("mp3", "小酒窝*");
                audioplayer.Play("vlc", "小酒窝vlc*");
                Console.ReadKey();
            }

    适配器模式就是通过构造适配器,通过适配器可以完成现有的功能

    上方的例子就是mp4与vlc格式不同,如果需要播放需要找不同对应的类,我们使用适配器去选择,再通过一个类,调用适配器,完成我们需要实现的功能

    所谓适配器,就是可以找到最合适的那个调用者。

  • 相关阅读:
    js_css_dl.dt实现列表展开、折叠效果
    property_自己编写一个读取Property文件的Util类
    HttpClient_002_中文乱码、HttpClient中文乱码透析、总结
    HttpClient_001_初步实现项目01的servlet,与项目02的servlet,之间数据访问
    jsp:中文乱码解决
    linux命令
    js 监测from表单中的input和select,时时监测,没有输入或选择信息报错,不允许提交数据
    数据库的那些事
    待参考
    layer.open多次触发,遮罩层覆盖content的解决办法
  • 原文地址:https://www.cnblogs.com/ningxinjie/p/12216458.html
Copyright © 2011-2022 走看看