码迷,mamicode.com
首页 > 其他好文 > 详细

适配器模式

时间:2017-10-29 13:45:43      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:func   方法   mp4   his   const   适配器   type   logs   方式   

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

举个例子:电脑正常工作时需要的电压时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();
 ?>

  

适配器模式

标签:func   方法   mp4   his   const   适配器   type   logs   方式   

原文地址:http://www.cnblogs.com/-beyond/p/7749765.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!