适配器模式

一、背景

       试想现在有两个接口,接口a正在被A使用,接口b正在被B使用(a不适用B,b不适用A),如果现在A要使用b怎么办?重新写一个a类型的 带有b功能的接口?这样是不是太重复,太麻烦了,所以适配器模式便产生了。

二、概念

      适配器模式,顾名思义,最核心的思想便是适配。就想我们的充电器 苹果充电器想要充安卓机怎么办?那还不简单,加一个转接头呗。同理,适配器模式也是如此,将一个类的接口转化为用户期待的接口,适配器模式使得原本因接口不兼容而不能一起工作的类一起工作。

三、代码实例

       比如现在让一个播放MP3的媒体播放器也能播放MP4和VLC

/**
 * @author xyp 适配器模式 
 */
public class AdapterPatternDemo {
	public static void main(String agrs[]) {
		AudioPlayer audioPlayer = new AudioPlayer();
		audioPlayer.play("mp3");
		audioPlayer.play("vlc");
		audioPlayer.play("mp4");
		audioPlayer.play("3D");
	}
}

interface Mp4AndVlcMediaPlayer {// mp4 和 vlc播放器接口
	public void mp4();

	public void vlc();
}

class MP4Player implements Mp4AndVlcMediaPlayer {// mp4播放器
	@Override
	public void mp4() {
		System.out.println("play mp4");
	}

	@Override
	public void vlc() {
	}
}

class VLCPlayer implements Mp4AndVlcMediaPlayer {// vlc播放器

	@Override
	public void mp4() {
	}

	@Override
	public void vlc() {
		System.out.println("paly VLC");
	}
}

/*
 * 现在要能播放MP3的播放器也能播放MP4及VLC,那么加一个适配器
 */
interface MediaPlay {
	public void play(String s);
}

class AudioPlayer implements MediaPlay {

	@Override
	public void play(String s) {
		if ("mp3".equals(s)) {
			System.out.println("play mp3");
		} else if ("mp4".equals(s) || "vlc".equals(s)) {// 通适配器来播放MP4和vlc格式
			MediaPlay madaper = new MediaPlayAdapter(s);
			madaper.play(s);
		} else {
			System.out.println("not supported!");
		}
	}
}

class MediaPlayAdapter implements MediaPlay {// 适配器
	private Mp4AndVlcMediaPlayer mp4AndVlcMediaPlayer;

	public MediaPlayAdapter(String s) {
		if ("mp4".equals(s)) {
			mp4AndVlcMediaPlayer = new MP4Player();
		}
		if ("vlc".equals(s)) {
			mp4AndVlcMediaPlayer = new VLCPlayer();
		}
	}

	@Override
	public void play(String s) {
		if ("mp4".equals(s)) {
			this.mp4AndVlcMediaPlayer.mp4();
		}
		if ("vlc".equals(s)) {
			this.mp4AndVlcMediaPlayer.vlc();
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值