适配器模式

Posted 寻觅beyond

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了适配器模式相关的知识,希望对你有一定的参考价值。

适配器模式只是将某个对象的接口适配为另外一个对象所期望的接口

举个例子:电脑正常工作时需要的电压时18V,而居民用电正常电压时220V,如果直接将电脑接上220V,那电脑肯定废了。这时可以使用适配器(Adapter),就是咱们电脑电源线中间的那一块黑不溜秋的东西,他的功能就是将220V的电压转换为电脑可用的18V电压。适配器模式就是这个理念。

再举一个例子,现在又MP3和MP4两种媒体文件,AudioPlayer可以播放MP3,但是不能播放MP4;Mp4Player两种文件都能播放,但是现在想让AudioPlayer播放MP4文件,就必须有一个适配器(MediaAdapter),这个适配器使用MP4的方法来播放即可

结合下面的代码理解一下:

<?php 
	class AudioPlayer{
		public $type;
		public $filename;
		public $mediaAdapter;//声明一个适配器,需要的时候可以实例化一个

		public function __construct($type,$filename){
			$this->type=$type;
			$this->filename=$filename;
		}

		public function play(){//如果是MP3格式,则不用适配器,直接就能播放
			if($this->type=="mp3"){
				echo "playing mp3 file ,filename: {$this->filename}\n";
			} else if($this->type=="mp4"){
			//如果是MP4,则自身不能播放,可以实例化一个适配器,让适配器去完成
				$mediaAdapter=new MediaAdapter("mp4");
				$mediaAdapter->play($this->type,$this->filename);
			} else {
				echo "Invalid media type\n";
			}
		}
	}

	//新建一个Mp4Player类
	class Mp4Player{
		public function play($type,$filename){
			echo "playing mp4 file ,filename: {$filename}\n";
		}
	}

	//适配器
	class MediaAdapter{
		public $Adapter;

		public function __construct($type){//根据请求方的要求,选择相应的模式
			if($type == "mp4"){
				$this->Adapter=new Mp4Player();
			}
		}

		//通过适配器,可以使用其他的类的方式。
		public function play($type,$filename){
			$this->Adapter->play($type,$filename);
		}
	}


	$audio=new AudioPlayer("mp3","Hello World");
	$audio->play();

	$audio=new AudioPlayer("mp4","Go to Hell");
	$audio->play();
 ?>

  

以上是关于适配器模式的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数

如何从片段适配器启动活动

片段中ListView的android自定义适配器

设计模式之单例模式

片段内带有基本适配器的列表视图

片段中gridview的Android文本和图像适配器