适配器模式笔记

适配器模式

作为两个不兼容接口的桥梁,具备了两个接口的功能。举例类似于自来水跟饮用水之间的过滤器。

优点

1、可以让任何两个没有关联的类一起运行。
2、提高了类的复用。
3、增加了类的透明度。
4、灵活性好。

缺点

  1. 表面上看上去是使用接口A,其实是使用了接口B。
  2. 挂羊头卖狗肉,代码规模庞大时不方便记忆,容易混淆,增加复杂度。
  3. 如果可以不适用适配器,就尽量不使用。

案例举例

让播放器可以使用高级播放器的功能变成多功能播放器。

在这里插入图片描述
代码实现

package Adapter;

public class AdapterDemo {
    public static void main(String[] args) {
        MultifunctionPlayer MultifunctionPlayer = new MultifunctionPlayer();
        MultifunctionPlayer.play("music","稻花");
        MultifunctionPlayer.play("movie","长津湖");
        MultifunctionPlayer.play("img","123456.jpg");
        MultifunctionPlayer.play("mp4","123.mp4");

    }
    //播放器
    public interface AdvancedMediaPlayer{
        //播放音乐
        public void playMovie(String fileName);
        //播放电影
        public void playMusic(String fileName);
    }

    public static class MoviePlayer implements AdvancedMediaPlayer{

        @Override
        public void playMovie(String fileName) {
            System.out.println("播放视频:"+fileName);
        }

        @Override
        public void playMusic(String fileName) {

        }
    }

    public static class MusicPlayer implements AdvancedMediaPlayer{

        @Override
        public void playMovie(String fileName) {

        }

        @Override
        public void playMusic(String fileName) {
            System.out.println("播放音乐:"+fileName);
        }
    }
    //媒体播放器
    public interface MediaPlayer{
        public void play(String type,String fileName);
    }

    public static class MediaAdapter implements MediaPlayer{

        AdvancedMediaPlayer advancedMediaPlayer;

        public MediaAdapter(String type){
            if (type.equals("movie")){
                advancedMediaPlayer = new MoviePlayer();
            }else if (type.equals("music")){
                advancedMediaPlayer = new MusicPlayer();
            }
        }

        @Override
        public void play(String type,String fileName) {
            if (type.equals("music")){
                advancedMediaPlayer.playMusic(fileName);
            }else if (type.equals("movie")){
                advancedMediaPlayer.playMovie(fileName);
            }
        }
    }
    public static class MultifunctionPlayer implements MediaPlayer{
        MediaPlayer MediaPlayer;
        @Override
        public void play(String type, String fileName) {
            if (type.equals("img")){
                System.out.println("查看图像:"+fileName);
            }else if (type.equals("music") ||
            type.equals("movie")){
                MediaPlayer = new MediaAdapter(type);
                MediaPlayer.play(type,fileName);
            }else {
                System.out.println("不支持:"+type);
            }
        }
    }


}

展示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liaoMITC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值