作者:陈玲琳2013 | 来源:互联网 | 2020-09-13 10:47
生活场景问题引入,假如需要去国外旅游,每个电子产品都是需要电源来做驱动,电子产品是很消耗电量的,就要将一个类的接口转换为另外一种接口,让原本接口不兼容的类可以兼容即可。
在这里,中国电压就是被适配者,美国电压是最后的输出(目标),就是是配置者
interface UsaInterface{
public function outPut5V();}class China{
private $voltage = 220;
public function outPut220V()
{
return $this->voltage;
}}class Adapter extends China implements UsaInterface{
public function outPut5V()
{
// TODO: Implement outPut5V() method.
$chinaVoltage = $this->outPut220V();
return $chinaVoltage / 2 + 10 . "V";
}}class Computer{
public function index(UsaInterface $usa)
{
if ($usa->outPut5V() === "120V") {
printf("可以在美国使用中国的电源插头给电脑充电了");
} else {
printf("不可以在美国使用中国的电源插头给电脑充电了");
}
}}class Client{
public function __construct()
{
$adapter = new Adapter();
$computer = new Computer();
$computer->index($adapter);
}}
二、对象适配器模式
对象适配器其实就是在类适配器的模式上做了一个调整,让适配器类Adapter
不去继承被适配者的类,而是让它们组合在一起,这样就可以增加了使用的灵活
度,也不会暴露被适配者的很多方法(使用关联关系来代替继承关系【合成复用原则】)。同时,没有继承就没有办法去覆盖父类的方法重写了,也算是有好有坏吧。如下:
class Adapter implements UsaInterface{
protected $china;
public function __construct(China $china)
{
$this->china = $china;
}
public function outPut5V()
{
// TODO: Implement outPut5V() method.
$chinaVoltage = $this->china->outPut220V();
return $chinaVoltage / 2 + 10 . "V";
}}
三、接口适配器(缺省适配器模式)
当不需要全部实现接口提供的方法时,可以先设计一个抽象类实现接口,并为接口提供默认的的空方法实现,那么改抽象类的子方法就可以有选择的覆盖父类的某
些方法来实现需求,(适用于一个接口不想使用所有的方法的情况)
相关学习推荐:PHP编程从入门到精通
以上就是一起看看PHP设计模式之适配器模式的详细内容,更多请关注 第一PHP社区 其它相关文章!