PHP设计模式之-----适配器模式

<?php
//适配器要完成的功能很明确,引用现有接口的方法实现新的接口的方法。
//你的接口不改的话,我就利用现有接口和你对接一下吧。
//“开-闭”原则,一个软件实体应当对扩展开放,对修改关闭
//http://www.cnblogs.com/DeanChopper/p/4770572.html

/**
 * Class Toy
 *
 * @describe 原有的接口
 *
 * @author   nick
 *
 */
abstract class Toy
{
	public abstract function openMonth();

	public abstract function closeMonth();
}

class Dog extends Toy
{

	public function openMonth()
	{
		echo '狗张嘴';
	}

	public function closeMonth()
	{
		echo '狗闭嘴';
	}
}

class Cat extends Toy
{

	public function openMonth()
	{
		echo '猫张嘴';
	}

	public function closeMonth()
	{
		echo '猫闭嘴';
	}
}

// 目标公司 红枣公司
interface RedTarget
{
	public function doMonthOpen();

	public function doMonthClose();
}

// 目标公司 绿枣公司
interface GreenTarget
{
	public function operateMouth( $type = 0 );
}

// 红枣公司适配器
class ReaAdapter implements RedTarget
{
	private $adaptee;
	// 只是接受 Toy 的子类
	public function __construct( Toy $adaptee )
	{
		$this->adaptee = $adaptee;
	}

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

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

// 绿枣公司适配器
class GreenAdapter implements GreenTarget
{
	private $adaptee;

	public function __construct(Toy $adaptee) {
		$this->adaptee=$adaptee;
	}

	public function operateMouth( $type = 0 )
	{
		if($type){
			$this->adaptee->openMonth();
		}else{
			$this->adaptee->closeMonth();
		}
	}
}

class testDriver
{
	public function run(){
		// 实例化一个玩具
		$adaptee_dog = new Dog();
		// 红枣公司适配器
		echo '红枣公司适配器';
		$adapter_red  = new ReaAdapter($adaptee_dog);
		$adapter_red->doMonthOpen();
		$adapter_red->doMonthClose();
		// 绿枣公司适配器
		$adaptee_green = new GreenAdapter($adaptee_dog);
		$adaptee_green->operateMouth(1);
		$adaptee_green->operateMouth(0);
	}
}
$test = new testDriver();
$test->run();








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值