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

    模式介绍

    适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。举个例子,读卡器是作为内存卡和笔记本之间的适配器。

    模式优点

    1、可以让任何两个没有关联的类一起运行。
    2、提高了类的复用。

    模式缺点

    1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是A接口,其实内部被适配成了B接口的实现。

    使用场景

    1、系统需要使用现有的类,而此类的接口不符合系统的需要。
    2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。

    系统建模

    通过适配器类,使MP3也具备MP4的放视频的功能。

    系统实现

    /**
     * 播放视频顶级接口
     */
    public interface VideoPlayer {
        public void playVideo();
        public void playAudio();
    }
    
    /**
     * MP4实体类
     */
    public class MP4Player implements VideoPlayer {
    
        @Override
        public void playVideo(){
            System.out.println("播放视频!");
        }
    
        @Override
        public void playAudio(){
            System.out.println("播放音频!");
        }
    }
    
    /**
     * 适配器类
     */
    public class MP4Adapter {
        private VideoPlayer videoPlayer = new MP4Player();
    
        @Override
        public void playVideo(){
            videoPlayer.playVideo();
        }
    }
    
    /**
     * 播放音频顶级接口
     */
    public interface AudioPlayer {
        public void playAudio();
    }
    
    /**
     * MP3实体类,拥有播放视频适配器类
     */
    public class MP3Player implements AudioPlayer {
        private MP4Adapter mp4Adapter = new MP4Adapter();
    
        @Override    
        public void playAudio(){
            System.out.println("播放音频!");
        }
    
        @Override
        public void playVideo(){
            mp3Adapter.playVideo();
        }
    }
    
    /**
     * 客户端
     */
    public class Client {
        public static void main(String args[]){
           MP3Player mp3 = new MP3Player();
           mp3.playAudio();
           mp3.playVideo();
        }
    }
    
    结果:
    播放音频!
    播放视频!
    
  • 相关阅读:
    字符串转日期
    arcgis server 10.1 PublishingTools工具无法启动Service's containing process has crashed
    net中捕获摄像头视频的方式及对比
    sql server下划线查询
    字符串与图片的Base64编码转换操作
    自定义DataSet
    判断窗体是否已存在实例
    字符串二次处理,补位+截取
    vue踩坑-This relative module was not found
    ajax和axios请求本地json数据对比
  • 原文地址:https://www.cnblogs.com/feiqiangsheng/p/12115692.html
Copyright © 2011-2022 走看看