分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

PHP设计模式之适配器模式

发布时间:2023-09-06 01:09责任编辑:傅花花关键词:PHP

1.适配器模式将某个对象的接口适配为另一个对象所期望的接口。一个适配允许通常因为

接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的

类中。个人认为是在不更改基类的基础之上,通过继承与扩展来满足新的需求。

2.需求:当前错误日志是生成txt格式的文件,但是需要新增一个格式为xml的日志文件。

 

 

3.基类 ErrorObject.class.php

功能:实例化错误对象的时候传入错误信息,对象可以通过调用getError()方法来获取错误信息

<?php

class ErrorObject{
    private $_error;

    public function __construct($error)
    {
        $this->_error = $error;

    }

    public function getError()
    {
        return $this->_error;
    }
}

 

4.txt日志生成类

功能:实例化txt日志对象的时候传入错误对象,对象调用write方法写入日志文件

<?php

class LogToTxt{
    private $_errorObject;

    public function __construct($errorObject)
    {
        $this->_errorObject = $errorObject;
    }

    public function write()
    {
        fwrite(fopen(‘log.txt‘,‘w‘),$this->_errorObject->getError());
    }
}

5.客户端代码  index.php

<?php
require ‘ErrorObject.class.php‘;
require ‘LogToTxt.class.php‘;

$_logtotxt = new LogToTxt(new ErrorObject(‘404:HTTP error!‘));
$_logtotxt->write();

功能:通过在实例化LogToTxt的时候传入包含初始化错误信息的错误对象,对象$_logtotxt调用write方法将错误信息写入日志文件。

适配器模式  

在生成txt格式文件的时候也要生成xml文件,但是之前的错误处理类是不能满足这个要求的,在不更改错误类的基础之上要实现这个功能,就需要新建一个新类来拓展基类的功能,以达到兼容适配的要求。

1.在ErrorObject.class.php不变的基础之上,子类ErrorXmlObject.class.php继承并拓展

ErrorXmlObject.class.php

<?php

class ErrorXmlObject extends ErrorObject{
    private $_line;
    private $_text;

    public function __construct($error)
    {
        parent::__construct($error);
        $_temp = explode(‘:‘,$this->getError());
        $this->_line = $_temp[0];
        $this->_text = $_temp[1];
    }

    public function getLine()
    {
        return $this->_line;
    }

    public function getText()
    {
        return $this->_text;
    }
}

功能:继承ErrorObject,基类处理错误信息,并且调用基类处理后的结果,并且进行处理,生成自己处理信息的方式,也就是getLine()和getText()方法

2.LogToXml.class.php

功能:实例化对象的时候传入错误对象,调用错误对象其自己的方法生成xml格式的错误信息

<?php

class LogToXml{
    private $_errorObject;

    public function __construct($errorObject)
    {
        $this->_errorObject = $errorObject;

    }

    public function write()
    {
        $_xml = ‘<root>‘."\r\n";
        $_xml .= ‘<line>‘.$this->_errorObject->getLine().‘</line>‘."\r\n";
        $_xml .= ‘<text>‘.$this->_errorObject->getText().‘</text>‘."\r\n";
        $_xml .= ‘</root>‘."\r\n";
        file_put_contents(‘log.xml‘,$_xml);
    }
}

3.客户端代码

<?php
require ‘ErrorObject.class.php‘;
require ‘ErrorXmlObject.class.php‘;
require ‘LogToTxt.class.php‘;
require ‘LogToXml.class.php‘;

$_logtotxt = new LogToTxt(new ErrorObject(‘404:HTTP error!‘));
$_logtotxt->write();

$_logtoxml = new LogToXml(new ErrorXmlObject(‘404:HTTP error!‘));
$_logtoxml->write();

PHP设计模式之适配器模式

原文地址:http://www.cnblogs.com/zhouqi666/p/7479966.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved