加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_郴州站长网 (http://www.0735zz.com/)- 云通信、区块链、物联设备、云计算、站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP设计模式之适配器模式原理与用法详解

发布时间:2022-07-01 12:43:11 所属栏目:PHP教程 来源:互联网
导读:这篇文章主要介绍了PHP设计模式之适配器模式,简单描述了适配器模式的概念、原理并结合实例形式分析了php类适配器模式与对象适配器模式的具体定义与使用方法,需要的朋友可以参考下。 本文实例讲述了PHP设计模式之适配器模式原理与用法,分享给大家供大家参考
  这篇文章主要介绍了PHP设计模式之适配器模式,简单描述了适配器模式的概念、原理并结合实例形式分析了php类适配器模式与对象适配器模式的具体定义与使用方法,需要的朋友可以参考下。
 
  本文实例讲述了PHP设计模式之适配器模式原理与用法,分享给大家供大家参考,具体如下:
 
  一、什么是适配器模式
 
  适配器模式有两种:类适配器模式和对象适配器模式。其中类适配器模式使用继承方式,而对象适配器模式使用组合方式。由于类适配器模式包含双重继承,而PHP并不支持双重继承,所以一般都采取结合继承和实现的方式来模拟双重继承,即继承一个类,同时实现一个接口。类适配器模式很简单,但是与对象适配器模式相比,类适配器模式的灵活性稍弱。采用类适配器模式时,适配器继承被适配者并实现一个接口;采用对象适配器模式时,适配器使用被适配者,并实现一个接口。
 
  二、什么时候使用适配器模式
 
  适配器模式的作用就是解决兼容性问题,如果需要通过适配(使用多重继承或组合)来结合两个不兼容的系统,那就使用适配器模式。
 
  三、类适配器模式
 
  以货币兑换为例:
 
  <?php
  /**
  *  类适配器模式
  *        以货币兑换为例
  **/
  //美元计算类
  class DollarCalc
  {
    private $dollar;
    private $product;
    private $service;
    public $rate = 1;
    public function requestCalc($product,$service)
    {
      $this->product = $product;
      $this->service = $service;
      $this->dollar = $this->product + $this->service;
      return $this->requestTotal();
    }
    public function requestTotal()
    {
      $this->dollar *= $this->rate;
      return $this->dollar;
    }
  }
  //欧元计算类
  class EuroCalc
  {
    private $euro;
    private $product;
    private $service;
    public $rate = 1;
    public function requestCalc($product,$service)
    {
      $this->product = $product;
      $this->service = $service;
      $this->euro = $this->product + $this->service;
      return $this->requestTotal();
    }
    public function requestTotal()
    {
      $this->euro *= $this->rate;
      return $this->euro;
    }
  }
  //欧元适配器接口
  interface ITarget
  {
    function requester();
  }
  //欧元适配器实现
  class EuroAdapter extends EuroCalc implements ITarget
  {
    public function __construct()
    {
      $this->requester();
    }
    function requester()
    {
      $this->rate = .8111;
      return $this->rate;
    }
  }
  //客户类
  class Client
  {
    private $euroRequest;
    private $dollarRequest;
    public function __construct()
    {
      $this->euroRequest = new EuroAdapter();
      $this->dollarRequest = new DollarCalc();
      $euro = "€";
      echo "Euros: $euro" . $this->makeAdapterRequest($this->euroRequest) . "<br />";
      echo "Dollars: $" . $this->makeDollarRequest($this->dollarRequest);
    }
    private function makeAdapterRequest(ITarget $req)
    {
      return $req->requestCalc(40,50);
    }
    private function makeDollarRequest(DollarCalc $req)
    {
      return $req->requestCalc(40,50);
    }
  }
  $client = new Client();
  ?>
  运行结果:
 
  Euros: €72.999
 
  Dollars: $90
 
  四、对象适配器模式
 
  以桌面环境转向移动环境为例:
 
  <?php
  /**
  *  对象适配器模式
  *         从桌面环境转向移动环境
  **/
  //桌面布局接口
  interface IFormat
  {
    public function formatCSS();
    public function formatGraphics();
    public function horizontalLayout();
  }
  //桌面布局类实现
  class Desktop implements IFormat
  {
    public function formatCSS()
    {
      //调用桌面布局CSS文件
    }
    public function formatGraphics()
    {
      //调用图片
    }
    public function horizontalLayout()
    {
      //桌面水平布局
    }
  }
  //移动布局接口
  interface IMobileFormat
  {
    public function formatCSS();
    public function formatGraphics();
    public function verticalLayout();
  }
  //移动布局类实现
  class Mobile implements IMobileFormat
  {
    public function formatCSS()
    {
      //调用移动布局CSS文件
    }
    public function formatGraphics()
    {
      //调用图片
    }
    public function verticalLayout()
    {
      //移动垂直布局
    }
  }
  //移动布局适配器
  class MobileAdapter implements IFormat
  {
    private $mobile;
    public function __construct(IMobileFormat $mobile)
    {
      $this->mobile = $mobile;
    }
    public function formatCSS()
    {
      $this->mobile->formatCSS();
    }
    public function formatGraphics()
    {
      $this->mobile->formatGraphics();
    }
    public function horizontalLayout()
    {
      $this->mobile->verticalLayout();
    }
  }
  //客户类
  class Client
  {
    private $mobile;
    private $mobileAdapter;
    public function __construct()
    {
      $this->mobile = new Mobile();
      $this->mobileAdapter = new MobileAdapter($this->mobile);
      $this->mobileAdapter->formatCSS();
      $this->mobileAdapter->formatGraphics();
      $this->mobileAdapter->horizontalLayout();
    }
  }
  $client = new Client();
  ?>

(编辑:开发网_郴州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读