设计模式 一 适配器模式 Adapter(结构型模式)

<?php
/**
 * 设计模式 一 适配器模式 Adapter(结构型模式)
 * 
 * 定义:
 * 1、将一个接口转换成为客户想要的另一个接口
 * 2、使接口不兼容的那些类可以一起工作。
*/

/**
 * 模式结构
 * 1、目标抽象类(Target) 定义客户要用的特定领域的接口。
 * 2、适配器(Adapter) 调用另一个接口,作为一个转换器。
 * 3、被适配器(Adaptee) 定义一个接口,适配器需要接入。
 * 4、客户端(Client) 请求调用适配器。
 */

/**
 * 优缺点
 * 1、优点 可以统一对象的访问接口。但其前提是不能或不想修改原来的适配器老接口。
 * 2、缺点 客户调用可能需要变动,这时,修改起来比较麻烦。
 */

/**
 * 下面主要介绍 对象适配器。 有兴趣的可以学习类适配器
 */

/**
 * Target类 主要定义能够客户端使用的接口。
 */

abstract class Target {
	
	public abstract getTemperature(); //气温

	public abstract getPressure(); //气压

	public abstract getHumidity(); //湿度

	public abstract getUltraviolet(); //紫外线强度
}

/**
 * 被适配的类Adaptee(Adaptee 中的接口由于不能被客户端识别,所有需要被适配)
 *
 */

 class Adaptee {
	public function 得到温度() {
		Console.WriteLine('您得到了今日的温度');
	}

	public function 得到气压() {
		Console.WriteLine('您得到了今日的气压');
	}

	public function 得到湿度() {
		Console.WriteLine('您得到了今日的湿度');
	}

	public function 得到紫外线强度() {
		Console.WriteLine('您得到了今日的紫外线强度');
	}
 }


/**
 * 适配器 将不能被客户端识别的接口间接转换为可以被识别的接口
 */

class Adapter extends Target {
	public $adaptee;

	public function __construct() {
		$this->adaptee = new Adaptee(); //在适配器中必须要维护一个被适配器的对象。
	}

	// 通过适配器来适配原来不能被客户端所认识的接口
	
	public function getTemperature() {
		$this->adaptee.得到温度();
	}

	public function getPressure() {
		$this->adaptee.得到气压();
	}

	public function getHumidity() {
		$this->adaptee.得到湿度();
	}

	public function getUltraviolet() {
		$this->adaptee.得到紫外线强度();
	}
}

/**
 * 客户端
 */

 class client {
	 
	$target = new Adapter();
	//下面的这些就是客户端可以被识别了接口了
	$target->getTemperature();
	$target->getPressure();
	$target->getHumidity();
	$target->getUltraviolet();
 }

 //可以看出,上面的适配器就是一个中介人,它把本来客户端的请求转换成了Adaptee 所代表的接口所能理解的请求。或者说是,把本来客户端不认识的 Adaptee 间接介绍给了客户端认识,不过注意是间接。



设计模式目录

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值