当前位置:首页 > PHP教程 > php应用 > 列表

一起看看PHP设计模式之适配器模式

发布:smiling 来源: PHP粉丝网  添加日期:2022-07-03 09:10:43 浏览: 评论:0 

PHP设计模式之适配器模式

生活场景问题引入:

假如需要去国外旅游,游玩,现在电子产品很丰富,但是每个电子产品都是需要电源来做驱动,手机,电脑,相机。。。但是又有一个很显示的问题,电子产品是很消耗电量的,电量没有了,就需要充电,在我们国家,我们买的电子产品出场带的电源充电器,一般都是220V的电压,但是世界很大,每个国家的要求(规定)又是不同的,比如美国就是120V

原理:

将一个类的接口转换为另外一种接口,让原本接口不兼容的类可以兼容。

用户调用适配器转化出来的目标接口方法,适配器再去调用被适配者的相关接口方法

好处:

用户是看不到被适配者,属于解耦的操作

适配器模式属于结构型的设计模式

适配器模式的三种实现方式

一、 类适配器

一起看看PHP设计模式之适配器模式

根据上面的UML图,我们可以看出,需要一个美国电压的接口UsaInterface,一个适配器类Adapter,一个中国电压的接口Chine,一个使用者Computer,在这里,中国电压就是被适配者,美国电压是最后的输出(目标),就是是配置者

  1. interface UsaInterface{ 
  2.  
  3.     public function outPut5V();}class China{ 
  4.  
  5.     private $voltage = 220; 
  6.  
  7.  
  8.  
  9.     public function outPut220V() 
  10.  
  11.     { 
  12.  
  13.         return $this->voltage; 
  14.  
  15.     }}class Adapter extends China implements UsaInterface{ 
  16.  
  17.  
  18.  
  19.     public function outPut5V() 
  20.  
  21.     { 
  22.  
  23.         // TODO: Implement outPut5V() method. 
  24.  
  25.         $chinaVoltage = $this->outPut220V(); 
  26.  
  27.  
  28.  
  29.         return $chinaVoltage / 2 + 10 . "V"
  30.  
  31.     }}class Computer{ 
  32.  
  33.     public function index(UsaInterface $usa
  34.  
  35.     { 
  36.  
  37.         if ($usa->outPut5V() === "120V") { 
  38.  
  39.             printf("可以在美国使用中国的电源插头给电脑充电了"); 
  40.  
  41.         } else { 
  42.  
  43.             printf("不可以在美国使用中国的电源插头给电脑充电了"); 
  44.  
  45.         } 
  46.  
  47.     }}class Client{ 
  48.  
  49.     public function __construct() 
  50.  
  51.     { 
  52.  
  53.         $adapter = new Adapter(); 
  54.  
  55.         $computer = new Computer(); 
  56.  
  57.  
  58.  
  59.         $computer->index($adapter); 
  60.  
  61.     }} 

二、对象适配器模式

对象适配器其实就是在类适配器的模式上做了一个调整,让适配器类Adapter不去继承被适配者的类,而是让它们组合在一起,这样就可以增加了使用的灵活度,也不会暴露被适配者的很多方法(使用关联关系来代替继承关系【合成复用原则】)。同时,没有继承就没有办法去覆盖父类的方法重写了,也算是有好有坏吧。如下:

  1. class Adapter implements UsaInterface{ 
  2.  
  3.     protected $china
  4.  
  5.  
  6.  
  7.     public function __construct(China $china
  8.  
  9.     { 
  10.  
  11.         $this->china = $china
  12.  
  13.     } 
  14.  
  15.  
  16.  
  17.  
  18.  
  19.     public function outPut5V() 
  20.  
  21.     { 
  22.  
  23.         // TODO: Implement outPut5V() method. 
  24.  
  25.         $chinaVoltage = $this->china->outPut220V(); 
  26.  
  27.  
  28.  
  29.         return $chinaVoltage / 2 + 10 . "V"
  30.  
  31.     }} 

三、接口适配器(缺省适配器模式)

当不需要全部实现接口提供的方法时,可以先设计一个抽象类实现接口,并为接口提供默认的的空方法实现,那么改抽象类的子方法就可以有选择的覆盖父类的某

些方法来实现需求,(适用于一个接口不想使用所有的方法的情况)

Tags: PHP设计模式 PHP适配器模式

分享到: