• PHP设计模式适配器模式


    适配器设计模式只是将某个对象的接口适配为另一个对象所期望的接口。

    适配器设计模式的目标是有助于面向对象的代码,该模式可以为对象接口创建回话。

    通过实例说明:

     1 /*
     2      在项目最初的代码库中,名为errorObject的对象能够处理所有错误的消息和代码。直接将消息输入至控制台:
     3  */
     4 
     5 class errorObject{
     6     private $__error;
     7 
     8     pubic function __construct($error){
     9         $this->__error = $error;
    10     }
    11 
    12     public function getError(){
    13         return $this->__error;
    14     }
    15 }
    16 
    17 class logToConsole{
    18     private $__errorObject;
    19 
    20     public function __construct($errorObject){
    21         $this->__errorObject = $errorObject;
    22     }
    23 
    24     public function write(){
    25         fwrite(STDERR,$this->__errorObject->getError());
    26     }
    27 }
    28 
    29 /*
    30      这样在使用时只需要如下代码:
    31  */
    32 
    33 $error = new errorObject("404:Not Found");
    34 
    35 $log = new logToConsole($error);
    36 
    37 $log->write();
    38 
    39 /*
    40      这时项目中加入了新的网络管理员,需要将错误记录至一个多列CSV文件,要求第一行是错误代码,第二行是错误文本。
    41  */
    42 class logToCSV{
    43     const CSV_LOCATION = 'log.csv';
    44 
    45     private $__errorObject;
    46 
    47     public function __construct($errorObject){
    48         $this->__errorObject = $errorObject;
    49     }
    50 
    51     public function write(){
    52         $line = $this->__errorObject->getErrorNumber();
    53         $line .= ',';
    54         $line .= $this->__errorObject->getErrorText();
    55         $line .="\n";
    56 
    57         file_put_contents(self::CSV_LOCATION,$line,FILE_APPEND);
    58     }
    59 }
    60 
    61 /*
    62      针对这个问题可以1.更改现有代码库的errorObject类;2.创建一个Adapter对象。考虑到保持这些公共接口标准型的需求,创建一个Adapter对象是最佳的选择。
    63  */
    64 
    65 class logToCSVAdapter extends errorObject
    66 {
    67     private $__errorNumber,$__errorText;
    68 
    69     public function __construct($error){
    70         parent::__construct($error);
    71 
    72         $parts = explode(':',$this->getError());
    73 
    74         $this->__errorNumber = $parts[0];
    75 
    76         $this->__errorText = $parts[1];
    77     }    
    78 
    79     public function getErrorNumber(){
    80         return $this->__errorNumber;
    81     }
    82 
    83     public function getErrorText(){
    84         return $this->__errorText;
    85     }
    86 }
    87 
    88 /*
    89      这样,在使用时可以这样调用:
    90  */
    91 
    92 $error = new logToCSVAdater("404:Not Found");
    93 
    94 $log = new logToCSV($error);
    95 
    96 $log->write();

      在需要转化一个对象的接口用于另一个对象时,实现Adapter对象不仅是最佳的做法,而且也能减少很多麻烦。

  • 相关阅读:
    jvm内存分部
    vue 浏览器滚动行为
    vue中vueRouter使用
    vue脚手架的安装和使用
    vue 在路由中复用组件
    单例模式
    ser2net使用
    怎样使用万用表来测试板子上的TX和RX引脚
    STM32W芯片的JTAG口用于GPIO
    openwrt构建过程探索
  • 原文地址:https://www.cnblogs.com/fanchangfa/p/2871966.html
Copyright © 2020-2023  润新知