PHP设计模式之适配器模式
2017-09-05 18:10
603 查看
1.适配器模式将某个对象的接口适配为另一个对象所期望的接口。一个适配允许通常因为
接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的
类中。个人认为是在不更改基类的基础之上,通过继承与扩展来满足新的需求。
2.需求:当前错误日志是生成txt格式的文件,但是需要新增一个格式为xml的日志文件。
3.基类 ErrorObject.class.php
功能:实例化错误对象的时候传入错误信息,对象可以通过调用getError()方法来获取错误信息
<?phpclass ErrorObject{
private $_error;
public function __construct($error)
{
$this->_error = $error;
}
public function getError()
{
return $this->_error;
}
}
4.txt日志生成类
功能:实例化txt日志对象的时候传入错误对象,对象调用write方法写入日志文件
<?phpclass LogToTxt{
private $_errorObject;
public function __construct($errorObject)
{
$this->_errorObject = $errorObject;
}
public function write()
{
fwrite(fopen('log.txt','w'),$this->_errorObject->getError());
}
}
5.客户端代码 index.php
<?phprequire '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
<?phpclass 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格式的错误信息
<?phpclass 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.客户端代码
<?phprequire '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();
接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的
类中。个人认为是在不更改基类的基础之上,通过继承与扩展来满足新的需求。
2.需求:当前错误日志是生成txt格式的文件,但是需要新增一个格式为xml的日志文件。
3.基类 ErrorObject.class.php
功能:实例化错误对象的时候传入错误信息,对象可以通过调用getError()方法来获取错误信息
<?phpclass ErrorObject{
private $_error;
public function __construct($error)
{
$this->_error = $error;
}
public function getError()
{
return $this->_error;
}
}
4.txt日志生成类
功能:实例化txt日志对象的时候传入错误对象,对象调用write方法写入日志文件
<?phpclass LogToTxt{
private $_errorObject;
public function __construct($errorObject)
{
$this->_errorObject = $errorObject;
}
public function write()
{
fwrite(fopen('log.txt','w'),$this->_errorObject->getError());
}
}
5.客户端代码 index.php
<?phprequire '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
<?phpclass 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格式的错误信息
<?phpclass 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.客户端代码
<?phprequire '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设计模式——适配器模式
- PHP设计模式系列(十二):适配器模式
- PHP设计模式之适配器模式,建造者模式,数据访问对象模式
- PHP设计模式之适配器模式代码实例
- PHP设计模式--适配器模式
- PHP设计模式17-适配器模式
- php模式设计之 适配器模式
- PHP设计模式之适配器模式,建造者模式,数据访问对象模式
- php中的设计模式之--适配器模式
- PHP设计模式笔记:使用PHP实现适配器模式
- PHP设计模式-适配器模式
- php设计模式之适配器模式
- PHP设计模式之适配器模式代码实例
- [php]php设计模式 Adapter(适配器模式)
- PHP设计模式——适配器模式(Adapter)
- PHP设计模式之适配器模式
- php八大设计模式之适配器模式
- php设计模式专题附源码(适配器模式、模板模式、命令模式、单例模式、观察者模式)
- php设计模式之适配器模式
- 初识PHP设计模式--适配器模式