• PHP适配器模式


    把一个类的接口变换成客户端所期待的的另一种接口,从而使原本因接口不匹配无法在一起工作的两个类可以一起工作。

    适配器的用意是将接口不同而功能相同或者相近的两个接口加以转换,为适配器角色补充一个原角色没有的方法。

    一、类的适配器模式

    把被适配的类的API转换成目标类的API

    涉及的角色:

    目标角色(就是所期待的得到的接口,由于这里讨论的是类适配器,因此目标不可以是类 )

    原角色adaptee 现有需要适配的接口。

    适配器角色:适配器类,把源接口转换成目标接口。这一角色必须是类。

    example:

     1 /**
     2  * 类的适配器模式
     3  */
     4 interface Target{
     5 
     6     /**
     7      * 这里是源类已有的方法
     8      */
     9     public function sampleOperation1();
    10     /**
    11      * 
    12      * 源类没有的方法 ...
    13      */
    14     public function sampleOperation2();
    15     
    16     
    17 
    18 }
    19 
    20 class adaptee{
    21 
    22     /**
    23      * 此类为源类
    24      */
    25     
    26     public function sampleOperation1(){
    27     
    28     }
    29 
    30 }
    31 /**
    32  * 
    33  * 适配器-- ...
    34  * @author Lujianchao
    35  *
    36  */
    37 
    38 class adapter extends adaptee implements Target{
    39 
    40     
    41     
    42     public function sampleOperation2(){
    43     
    44         //some actions
    45     }
    46 
    47 }
    View Code

    二、对象的适配器模式

    与类的适配器模式一样,对象的适配器模式把被适配的类的API钻换成目标类的API,不同的是,对象适配器模式不再使用继承,而是运用委派关系连接到apatee类。

    因此可以通过委派将多种不同的源适配到同一个目标。这是与类适配器的区别。。

    但是,想要置换掉源类的方法不容易,如果一定要,则只好先做一个源类的子类,将源类方法置换掉。然后把源类的子类当做真正的源进行适配。

    置换不易但是添加易。

    example:

     1 /**
     2  * 对象适配器
     3  * 
     4  */
     5 
     6 interface Target{
     7 
     8     /**
     9      * 这里是源类已有的方法
    10      */
    11     public function sampleOperation1();
    12     /**
    13      * 
    14      * 源类没有的方法 ...
    15      */
    16     public function sampleOperation2();
    17     
    18     
    19 
    20 }
    21 
    22 class adaptee{
    23 
    24     /**
    25      * 此类为源类
    26      */
    27     
    28     public function sampleOperation1(){
    29     
    30     }
    31 
    32 }
    33 
    34 /**
    35  * 
    36  * 没有继承关系 ...
    37  * @author Lujianchao
    38  *
    39  */
    40  class Adapter implements Target{
    41  
    42      private $adaptee;
    43      
    44      /**
    45       * 
    46       * 委托..
    47       * @param $adaptee
    48       */
    49      
    50      public function Adapter(adaptee $adaptee){
    51      
    52          $this->adaptee=$adaptee;
    53      }
    54      
    55      /**
    56       * 委派
    57       */
    58      
    59      public function sampleOperation1(){
    60      
    61          $this->adaptee->sampleOperation1();
    62      }
    63      
    64      /**
    65       *需要的方法
    66       * 
    67       */
    68      
    69      public function  sampleOperation2(){
    70      
    71          //this is your code
    72          
    73      }
    74      
    75      
    76  }
    View Code
  • 相关阅读:
    编译Openmv固件&增加串口
    边缘 AI 平台的比较
    CVPR2021 | 重新思考BatchNorm中的Batch
    ICCV2021 |重新思考人群中的计数和定位:一个纯粹基于点的框架
    ICCV2021 | 重新思考视觉transformers的空间维度
    CVPR2021 | Transformer用于End-to-End视频实例分割
    漫谈CUDA优化
    AAAI 2021 最佳论文公布
    综述专栏 | 姿态估计综述
    为什么GEMM是深度学习的核心
  • 原文地址:https://www.cnblogs.com/phplover/p/3088148.html
Copyright © 2020-2023  润新知