设计模式之《适配器模式》学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhou6282610/article/details/87966831

概念

适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作使用。

音乐播放器为例子

首先,我们创建一个音乐播放器的接口。

public interface MusicPlayer {

	/**
	 * 播放音乐
	 * 
	 * @param type
	 *            音乐格式
	 * @param filename
	 *            文件
	 */
	public void play(String type, String filename);
}

然后,引入一个音频解码的库。

public class ExistPlayer {

    public void playMp3(String filename){
        System.out.println("play mp3 : "+filename);
    }

    public void playWma(String filename){
        System.out.println("play wma : "+filename);
    }

}

假设这个不改动这个音频库的源代码,怎么让系统对这个库进行兼容支持呢?那么我们就需要创建一个适配器进行兼容。

public class PlayerAdapter implements MusicPlayer {
	// 在适配器中使用旧接口
	private ExistPlayer player;

	public PlayerAdapter() {
		player = new ExistPlayer();
	}

	@Override
	public void play(String type, String filename) {
		if (type == "mp3") {
			player.playMp3(filename);
		} else if (type == "wma") {
			player.playWma(filename);
		}
	}

}

最后,我们调用播放器,就会根据传入的音频类型,进行自动的适配解码处理。

public static void main(String[] args) {
	MusicPlayer player = new PlayerAdapter();
	player.play("mp3", "music");
	player.play("wma", "wahaha");
}

作用

作为一个中间者协调不兼容的双方,用于解决新旧系统( 或新旧接口 )之间的兼容问题,使其兼容。

优点和缺点

优点:

  • 可以让两个不相干的类一起运行,无需修改旧代码,灵活性好。

缺点:

  • 适配器模式用多了会使整个系统变得很复杂,因为你调用的是适配器,却不知道适配器内部做了多少转换操作,所以在能用别的办法解决问题时,尽量少用适配器模式。

猜你喜欢

转载自blog.csdn.net/zhou6282610/article/details/87966831