设计模式学习笔记-适配器模式

一个人,想从一个地方到底另一个地方,可以通过走路,开车,或者骑自行车等等。
假设之前有一条乡间小路,之前因为路况不好,人们只能通过走路,或者骑自行车通过。于是开发者针对这条路,开发ITraffic这个接口,同时实现了 Walk,Bike这两个具体类,但随着经济的发展,这条路被修建改善,路完全可以通过车了。
本来开发者想通过ITtraffic去实现了Car这个实例。但发现,这个Car的类之前有其他的开发者实现。而且符合自己的需求。唯一的问题是,这个ITraffic 不是实现 ITraffic接口,而是ICar。那么问题来了,为了Car这个能被开发者直接使用,怎么办?而这就今天要解决的问题。

//小路未开发之前的接口
interface ITraffic{ 
	public function run();
}

//走
class Walk implements ITraffic {
	public function run() {
		echo "<BR>BY Walk<BR>";
	}
}
//自行车
class Bike implements ITraffic {
	public function run() {
		echo "<BR>BY Bike</BR>";
	}
}
//路的通过方式
class Road {
  public function through($object) {
  	$object->run();
  }
}

多年之后路开发了,可以通车了。开发者发现了可复用的接口

//其他开发者开发的接口
interface ICar { 
	public function drive();
}
//这个具体类,符合当前开发者对车的需求。
class Car implements ICar { 
	public function drive(){
		echo "<BR>BY Car<BR>";
	}
}

让Car 能被 Road 像调用ITraffic的方式进行调用。

//为了让Car的调用能像ITraffic一样,适配Car
class AdapterCar implements ITraffic{ 
	private $_car = null;
	public function __construct($car) {
		$this->_car = $car;
	}
	public function run() { 
		$this->_car->drive();
	}
}

调用实例

$Road = new Road();
$Road->through(new Walk());
$Road->through(new Bike());
$Road->through(new AdapterCar(new Car()));

而这就是今天的主角--适配器模式
适配器(Adapter)模式的主要作用是:使得原本由于接口不兼容而不能一起工作的那些类可以一起工作

这个模式,不应该是开发初要考虑的,开发初期我们应该考虑全面,开发出满足大部分需求的接口。
这个模式是在开发后期,发现想使用一个已经存在的类,而它的接口不符合你的需求。

猜你喜欢

转载自blog.csdn.net/H_L_S/article/details/86653950