Java设计模式之适配器模式

适配器模式作为两个不兼容接口之间的桥梁,一般不用系统详细设计时,大多数用来解决正在服役的项目问题,比如需要再现有系统的接口之外加入另一个接口,满足用户的新需求,此时就可以用适配器模式。

1.接口

package adapter.interfaces;

public interface MediaPlayer {

    void play(String audioType, String fileName);
}

 

package adapter.interfaces;

public interface AdvanceMediaPlayer {

    public void playVlc(String fileName);
    public void playMp4(String fileName);
}

 

2.实现类

package adapter.classes;

import adapter.adapter.MediaAdapter;
import adapter.interfaces.MediaPlayer;

public class AudioPlayer implements MediaPlayer{

    private MediaAdapter mediaAdapter;
    
    @Override
    public void play(String audioType, String fileName) {
        if(audioType.equalsIgnoreCase("mp3")){
            System.out.println("Mp3Player:" + fileName);
        }else if(audioType.equalsIgnoreCase("mp4") || audioType.equalsIgnoreCase("vlc")){
            mediaAdapter = new MediaAdapter(audioType);
            mediaAdapter.play(audioType, fileName);
        }else{
            System.out.println("不支持" + audioType + "这种格式的文件!");
        }    
    }    
}
 

package adapter.classes;

import adapter.interfaces.AdvanceMediaPlayer;

public class Mp4Player implements AdvanceMediaPlayer{

    @Override
    public void playVlc(String fileName) {
        
    }

    @Override
    public void playMp4(String fileName) {
        System.out.println("Mp4Player:" + fileName);
    }

}

 

package adapter.classes;

import adapter.interfaces.AdvanceMediaPlayer;

public class VlcPlayer implements AdvanceMediaPlayer{

    @Override
    public void playVlc(String fileName) {
        System.out.println("VlcPlayer:" + fileName);    
    }

    @Override
    public void playMp4(String fileName) {
        
    }

}

 

3.适配器

package adapter.adapter;

import adapter.classes.Mp4Player;
import adapter.classes.VlcPlayer;
import adapter.interfaces.AdvanceMediaPlayer;
import adapter.interfaces.MediaPlayer;

public class MediaAdapter implements MediaPlayer{

    private AdvanceMediaPlayer advanceMediaPlayer;
    
    public MediaAdapter(String audioType) {
        if(audioType.equalsIgnoreCase("vlc")){
            advanceMediaPlayer = new VlcPlayer();
        }else if(audioType.equalsIgnoreCase("mp4")){
            advanceMediaPlayer = new Mp4Player();
        }
    }

    @Override
    public void play(String audioType, String fileName) {
        if(audioType.equalsIgnoreCase("vlc")){
            advanceMediaPlayer.playVlc(fileName);
        }else if(audioType.equalsIgnoreCase("mp4")){
            advanceMediaPlayer.playMp4(fileName);
        }        
    }
}

 

4.测试类

package adapter.demo;

import adapter.classes.AudioPlayer;

public class Demo {

    public static void main(String[] args) {
        AudioPlayer audioPlayer = new AudioPlayer();
        
        audioPlayer.play("mp3", "dream it possible");
        audioPlayer.play("mp4", "the rythm of rain");
        audioPlayer.play("vlc", "the heart will go on");
        audioPlayer.play("avi", "rock");
    }
}

 

5.测试结果

Mp3Player:dream it possible
Mp4Player:the rythm of rain
VlcPlayer:the heart will go on
不支持avi这种格式的文件!
 

再原有的实现类AudioPlayer里面调用适配器,将新加入的实现类Mp4Player和VlcPlayer连接起来,从而实现新的需求。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值