index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
<?php
//适配器模式
//适配器模式只是将某个对象的接口适配为另一个对象所期望的接口
//PHP适配器模式原理,先创建目标实现方法,然后通过适配器类来连接原功能和目标方法,来实现功能的扩展.
function
__autoload(
$filename
){
include_once
'class/'
.
$filename
.
'.class.php'
;
}
/*
* 原来的功能中只有输出错误到控制台,但是后来要求增加一个输出错误到csv中,方便记录,在不更改基类的情况加,通过适配器模式,继承原来得错误类,
* 并且扩展到适配器中,更改代码,实现输出到csv中.而且也不影响原来输出到控制台中.实现功能的扩展.
*/
//注释代码模仿原来的错误输出功能
//$error=new errorObject("404:Not Found");
// $log=new logToConsole($error);
// $log->write();
//【主要角色】
//目标(Target)角色:定义客户端使用的与特定领域相关的接口,这也就是我们所期待得到的
//源(Adaptee)角色:需要进行适配的接口
//适配器(Adapter)角色:对Adaptee的接口与Target接口进行适配;适配器是本模式的核心,适配器把源接口转换成目标接口,此角色为具体类
//使用场景
//1、你想使用一个已经存在的类,而它的接口不符合你的需求
//2、你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作
//3、你想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口(仅限于对象适配器)
//以下为增加新的功能
$error
=
new
logToCSVAdapter(
"404:Not Found"
);
$log
=
new
logToCSV(
$error
);
$log
->write();
?>
|
原始功能类
errorObject.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?php
/*
* 错误基类
*/
class
errorObject{
private
$_error
;
function
__construct(
$error
){
$this
->_error=
$error
;
}
function
getError(){
return
$this
->_error;
}
}
?>
|
logToConsole.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<?php
/*
* 输出到控制台,原始错误执行代码
*/
class
logToConsole{
private
$_errorObject
;
function
__construct(
$o
){
$this
->_errorObject=
$o
;
}
function
write(){
fwrite(STDERR,
$this
->_errorObject->getError());
}
}
?>
|
以上就是原来的功能,将指定的错误输出到控制台显示出来.现在的需求是扩展一个写入CSV文件中得功能.在不改变原来的功能的情况下.扩展功能
logToCSV.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<?php
/*
* 输出错误到csv文件
*/
class
logToCSV{
const
CSV_LOCATION=
'log.csv'
;
private
$_errorObject
;
function
__construct(
$o
){
$this
->_errorObject=
$o
;
}
function
write(){
$line
=
$this
->_errorObject->getErrorNumber();
$line
.=
','
;
$line
.=
$this
->_errorObject->getErrorText();
$line
.=
"\n"
;
file_put_contents
(self::CSV_LOCATION,
$line
,FILE_APPEND);
}
}
?>
|
接下来要做的就是将新得logToCSV方法和原来写得errorObject连接起来使用,两种方法,可以更改原来得errorObject类,或者是使用适配器模式,新增一个基类,来重写原来的功能
logToCSVAdapter.class.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?php
/*
* 扩展错误类,并且增加新的功能来支持logToCSV类中的方法
*/
class
logToCSVAdapter
extends
errorObject{
private
$_errorNumber
,
$_errorText
;
function
__construct(
$error
){
//继承父类的初始化.并且增加新的方法.
parent::__construct(
$error
);
$parts
=
explode
(
":"
,
$error
);
$this
->_errorNumber=
$parts
[0];
$this
->_errorText=
$parts
[1];
}
function
getErrorNumber(){
return
$this
->_errorNumber;
}
function
getErrorText(){
return
$this
->_errorText;
}
}
?>
|
本文转自 3147972 51CTO博客,原文链接:http://blog.51cto.com/a3147972/1406338,如需转载请自行联系原作者