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();
        }
    }
    
    结果:
    播放音频!
    播放视频!
    
  • 相关阅读:
    AWR
    geth入门命令和miner.start返回null的问题
    以太坊geth区块链私链建立
    Ubuntu无法找到add-apt-repository问题的解决方法
    Truffle测试框架
    TypeError: Data location must be "memory" for return parameter in function, but none was given.
    详解 Solidity 事件Event
    以太坊 Geth 环境搭建(Ubuntu)
    智能合约调试指南
    Truffle Smart Contract Error: Invalid number of parameter
  • 原文地址:https://www.cnblogs.com/feiqiangsheng/p/12115692.html
Copyright © 2011-2022 走看看