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

PHP设计模式之适配器模式原理与用法分析

发布:smiling 来源: PHP粉丝网  添加日期:2021-09-15 10:16:05 浏览: 评论:0 

这篇文章主要介绍了PHP设计模式之适配器模式,简单描述了适配器模式的概念、原理并结合实例形式分析了php类适配器模式与对象适配器模式的具体定义与使用方法,需要的朋友可以参考下。

本文实例讲述了PHP设计模式之适配器模式原理与用法,分享给大家供大家参考,具体如下:

一、什么是适配器模式

适配器模式有两种:类适配器模式和对象适配器模式。其中类适配器模式使用继承方式,而对象适配器模式使用组合方式。由于类适配器模式包含双重继承,而PHP并不支持双重继承,所以一般都采取结合继承和实现的方式来模拟双重继承,即继承一个类,同时实现一个接口。类适配器模式很简单,但是与对象适配器模式相比,类适配器模式的灵活性稍弱。采用类适配器模式时,适配器继承被适配者并实现一个接口;采用对象适配器模式时,适配器使用被适配者,并实现一个接口。

二、什么时候使用适配器模式

适配器模式的作用就是解决兼容性问题,如果需要通过适配(使用多重继承或组合)来结合两个不兼容的系统,那就使用适配器模式。

三、类适配器模式

以货币兑换为例:

  1. <?php 
  2. /** 
  3. *  类适配器模式 
  4. *        以货币兑换为例 
  5. **/ 
  6. //美元计算类 
  7. class DollarCalc 
  8.   private $dollar
  9.   private $product
  10.   private $service
  11.   public $rate = 1; 
  12.   public function requestCalc($product,$service
  13.   { 
  14.     $this->product = $product
  15.     $this->service = $service
  16.     $this->dollar = $this->product + $this->service; 
  17.     return $this->requestTotal(); 
  18.   } 
  19.   public function requestTotal() 
  20.   { 
  21.     $this->dollar *= $this->rate; 
  22.     return $this->dollar; 
  23.   } 
  24. //欧元计算类 
  25. class EuroCalc 
  26.   private $euro
  27.   private $product
  28.   private $service
  29.   public $rate = 1; 
  30.   public function requestCalc($product,$service
  31.   { 
  32.     $this->product = $product
  33.     $this->service = $service
  34.     $this->euro = $this->product + $this->service; 
  35.     return $this->requestTotal(); 
  36.   } 
  37.   public function requestTotal() 
  38.   { 
  39.     $this->euro *= $this->rate; 
  40.     return $this->euro; 
  41.   } 
  42. //欧元适配器接口 
  43. interface ITarget 
  44.   function requester(); 
  45. //欧元适配器实现 
  46. class EuroAdapter extends EuroCalc implements ITarget 
  47.   public function __construct() 
  48.   { 
  49.     $this->requester(); 
  50.   } 
  51.   function requester() 
  52.   { 
  53.     $this->rate = .8111; 
  54.     return $this->rate; 
  55.   } 
  56. //客户类 
  57. class Client 
  58.   private $euroRequest
  59.   private $dollarRequest
  60.   public function __construct() 
  61.   { 
  62.     $this->euroRequest = new EuroAdapter(); 
  63.     $this->dollarRequest = new DollarCalc(); 
  64.     $euro = "€"
  65.     echo "Euros: $euro" . $this->makeAdapterRequest($this->euroRequest) . "<br />"
  66.     echo "Dollars: $" . $this->makeDollarRequest($this->dollarRequest); 
  67.   } 
  68.   private function makeAdapterRequest(ITarget $req
  69.   { 
  70.     return $req->requestCalc(40,50); 
  71.   } 
  72.   private function makeDollarRequest(DollarCalc $req
  73.   { 
  74.     return $req->requestCalc(40,50); 
  75.   } 
  76. $client = new Client(); 
  77. ?> 

运行结果:

Euros: €72.999

Dollars: $90

四、对象适配器模式

以桌面环境转向移动环境为例:

  1. <?php 
  2. /** 
  3. *  对象适配器模式 
  4. *         从桌面环境转向移动环境 
  5. **/ 
  6. //桌面布局接口 
  7. interface IFormat 
  8.   public function formatCSS(); 
  9.   public function formatGraphics(); 
  10.   public function horizontalLayout(); 
  11. //桌面布局类实现 
  12. class Desktop implements IFormat 
  13.   public function formatCSS() 
  14.   { 
  15.     //调用桌面布局CSS文件 
  16.   } 
  17.   public function formatGraphics() 
  18.   { 
  19.     //调用图片 
  20.   } 
  21.   public function horizontalLayout() 
  22.   { 
  23.     //桌面水平布局 
  24.   } 
  25. //移动布局接口 
  26. interface IMobileFormat 
  27.   public function formatCSS(); 
  28.   public function formatGraphics(); 
  29.   public function verticalLayout(); 
  30. //移动布局类实现 
  31. class Mobile implements IMobileFormat 
  32.   public function formatCSS() 
  33.   { 
  34.     //调用移动布局CSS文件 
  35.   } 
  36.   public function formatGraphics() 
  37.   { 
  38.     //调用图片 
  39.   } 
  40.   public function verticalLayout() 
  41.   { 
  42.     //移动垂直布局 
  43.   } 
  44. //移动布局适配器 
  45. class MobileAdapter implements IFormat 
  46.   private $mobile
  47.   public function __construct(IMobileFormat $mobile
  48.   { 
  49.     $this->mobile = $mobile
  50.   } 
  51.   public function formatCSS() 
  52.   { 
  53.     $this->mobile->formatCSS(); 
  54.   } 
  55.   public function formatGraphics() 
  56.   { 
  57.     $this->mobile->formatGraphics(); 
  58.   } 
  59.   public function horizontalLayout() 
  60.   { 
  61.     $this->mobile->verticalLayout(); 
  62.   } 
  63. //客户类 
  64. class Client 
  65.   private $mobile
  66.   private $mobileAdapter
  67.   public function __construct() 
  68.   { 
  69.     $this->mobile = new Mobile(); 
  70.     $this->mobileAdapter = new MobileAdapter($this->mobile); 
  71.     $this->mobileAdapter->formatCSS(); 
  72.     $this->mobileAdapter->formatGraphics(); 
  73.     $this->mobileAdapter->horizontalLayout(); 
  74.   } 
  75. $client = new Client(); 
  76. ?>

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

分享到: