设计模式之结构型模式―― 2.1 适配器模式

<?php

	/**
	 * 2.1 适配器模式
	 *  解决的问题:
	 *  	如果有一个类的功能与现有的一个类的功能相似,
	 *  	但调用接口不同,可以使用此模式来统一调用接
	 *  	口。
	 *  解决方案:
	 *  	将一个类的接口转换成另外一个客户希望
	 *  	的接口。使得原本由于接口不兼容而不能
	 *  	一起工作的那些类可以一起工作。
	 *
	 *  此模式包含是哪个角色:
	 *  	1. 抽象目标角色
	 *  		职责:用于规范具体目标类,也是客户端
	 *  			  能调用的类的接口。
	 *  	2. 具体目标角色
	 *  		职责:客户端实际要访问的类.
	 *  	3. 需要被适配(兼容接口)的角色	 
	 *
	 *      4. 适配器角色
	 *      	职责:它是属于具体目标角色。但它的目的
	 *      		  是为了适配第3个角色,以保证客户端
	 *      		  调用的是统一的接口。
	 *  优点:
	 *  	1. 将目标类和适配者类解耦
	 *  	2. 增加了类的透明性和复用性,将具体的实
	 *  	   现封装在适配者类中,对客户端来说是透
	 *  	   明的,而且提高了适配者的复用性。
	 *  	3. 灵活性和扩展性都非常好,符合开闭原则。
	 *  缺点:
	 *  使用场景:
	 *  	1. 希望复用一些现存的类,但是接口又与复用
	 *  	   环境要求不一致。
	 *  	2. 此模式的使用有点“亡羊补牢”的感觉,是前
	 *  	   设计过程中就应该通过重构统一接口来避免的
	 *  			  
	 */

	/**
	 *  抽象目标角色
	 *  球员类,包含两个方法:1. 进攻;2. 防守
	 */
	abstract class Player{
		abstract public function attack();
		// abstract public function defense();
	} 

	/**
	 * 具体目标角色
	 * 中锋球员
	 */

	class Center extends Player{
		public function attack(){
			echo '进攻�D�D英语';
		}
	}

	/**
	 * 需要被适配的类
	 * 中锋球员
	 */
	class ForeignCenter {
		public function attack(){
			echo '进攻�D�D中文';
		}
	}

	/**
	 * 适配器类
	 * 翻译者
	 */

	class Translator extends Player{
		private $adaptee;
		public function __construct(){
			$this->adaptee=new ForeignCenter();
		}

		public function attack(){
			$this->adaptee->attack();
		}
	}

	$t1=new Translator();
	$t1->attack();

?>


你可能感兴趣的:(设计模式)