• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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();
    ?>
    
    

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • PHP设计模式之适配器模式(Adapter)原理与用法详解
    • php设计模式 Adapter(适配器模式)
    • PHP设计模式之适配器模式代码实例
    • 学习php设计模式 php实现适配器模式
    • php设计模式之适配器模式原理、用法及注意事项详解
    • PHP设计模式之适配器模式定义与用法详解
    • php设计模式之适配器模式实例分析【星际争霸游戏案例】
    • PHP设计模式(四)原型模式Prototype实例详解【创建型】
    • PHP设计模式(三)建造者模式Builder实例详解【创建型】
    • PHP设计模式(一)工厂模式Factory实例详解【创建型】
    • PHP设计模式概论【概念、分类、原则等】
    • PHP设计模式(五)适配器模式Adapter实例详解【结构型】
    上一篇:PHP设计模式之原型设计模式原理与用法分析
    下一篇:laravel中短信发送验证码的实现方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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