设计模式心得:四——适配器模式
适配器模式:将一个接口转换为另一个客户所期望的接口,使原本不兼容的接口变成兼容的。
适配器模式主要是为了解决在两个设计好的系统中,功能相似的接口不兼容的问题。用一个适配器类来解决接口不相容的问题,将目标接口转换为与另一个接口,使其兼容。
在适配器模式中,分为两类,一类是对象适配器,另一类是类适配器。
对象适配器:
对象适配器一般是包装适配对象,然后实现被适配接口,在适配接口中调用它包装的适配对象的方法。这样就将适配接口转化为了被适配接口。
类适配器:
类适配器需要运用多重继承来完成,它同时继承了被适配者和适配者,然后用自己的适配方法去调用被适配方法,这样就可以达到转换接口的目的了,但是由于PHP,java这样的语言都不支持类适配器,所以一般都采用的是对象适配器。
虽然适配器模式能够方便的解决接口不兼容的问题,但是不可滥用,一般都是在两个既有系统都不可更改的时候去使用适配器来解决问题,如果是在设计阶段或者是维护本系统时出现接口不兼容,都尽量重构为兼容的接口。
下面贴出自己写的适配器模式:
代码
<?php
//大写字母显示大写
interface IUpper {
public function showUpper($str);
}
//小写字母显示小写
interface ILower {
public function showLower($str);
}
//将小写转换为大写
class Convert implements IUpper {
private $_l;
public function __construct(ILower $l)
{
$this->_l = $l;
}
public function showUpper($str)
{
$l = $this->_l->showLower($str);
return strtoupper($l);
}
}
//小写类
class Lower implements ILower {
public function showLower($str)
{
return strtolower($str);
}
}
//小写类
$l = new Lower();
//适配器
$u = new Convert($l);
echo $u->showUpper('i am a lower');
?>
// 结果
// I AM A LOWER