PHP设计模式之适配器模式

简介:

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,如需转载请自行联系原作者
目录
相关文章
|
12天前
|
设计模式 数据库连接 PHP
PHP编程中的面向对象与设计模式
在PHP编程世界中,掌握面向对象编程(OOP)和设计模式是提升代码质量和开发效率的关键。本文将深入浅出地介绍如何在PHP中应用OOP原则和设计模式,以及这些实践如何影响项目架构和维护性。通过实际案例,我们将探索如何利用这些概念来构建更健壮、可扩展的应用程序。
|
25天前
|
设计模式 存储 SQL
PHP中的设计模式:单例模式的探索
在PHP开发中,单例模式是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。本文将通过一个简单的例子,逐步引导你理解如何在PHP中实现和利用单例模式,以及它在实际项目中的应用价值。
|
19天前
|
设计模式 XML 存储
【六】设计模式~~~结构型模式~~~适配器模式(Java)
文章详细介绍了适配器模式(Adapter Pattern),这是一种结构型设计模式,用于将一个类的接口转换成客户期望的另一个接口,使原本不兼容的接口能够一起工作,提高了类的复用性和系统的灵活性。通过对象适配器和类适配器两种实现方式,展示了适配器模式的代码应用,并讨论了其优点、缺点以及适用场景。
|
1月前
|
设计模式 中间件 PHP
探索PHP中的中间件设计模式
【8月更文挑战第1天】在现代Web开发中,设计模式的应用对于提高代码的可维护性、扩展性和重用性至关重要。本文将深入探讨PHP语言中如何实现中间件设计模式,并通过实际示例展示其应用。我们将通过一个用户认证中间件的创建过程,来揭示中间件如何在不修改原有业务逻辑的情况下增强功能,以及如何通过组合中间件来构建强大的请求处理流程。文章不仅会介绍中间件的基本概念,还会提供详细的代码示例和应用场景分析,帮助开发者更好地理解和运用中间件模式。
26 5
|
3月前
|
设计模式 存储 算法
PHP中常用的设计模式
设计模式是软件设计中解决问题的常见模式,它们提供了良好的实践,但使用时需注意其可能带来的耦合和测试难度问题。例如,单例模式可能导致全局状态,降低可测试性,而依赖注入可以作为更好的替代方案。
30 4
PHP中常用的设计模式
|
27天前
|
设计模式 算法 数据库连接
PHP编程中的设计模式:提升代码的可维护性与扩展性
在软件开发的世界里,设计模式是解决常见问题的经典方法。对于PHP开发者而言,掌握这些模式不仅能够提高代码质量,还能让开发过程更加高效。本文将介绍几个关键的设计模式,并通过实例展示如何将这些理念应用到实际项目中去。
27 0
|
2月前
|
设计模式 Go 数据处理
iLogtail设计模式问题之在iLogtail中,为何需要使用适配器模式
iLogtail设计模式问题之在iLogtail中,为何需要使用适配器模式
|
3月前
|
设计模式 数据库连接 PHP
PHP中的面向对象编程与设计模式应用
传统的PHP编程模式在面向对象的趋势下逐渐演进,本文探讨了面向对象编程在PHP中的应用,并深入分析了常用的设计模式如何优化代码结构和可维护性。
|
3月前
|
设计模式
适配器模式-大话设计模式
适配器模式-大话设计模式
|
2月前
|
设计模式 JavaScript 前端开发
js设计模式【详解】—— 适配器模式
js设计模式【详解】—— 适配器模式
23 0
下一篇
DDNS