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,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
设计模式 PHP
PHP中的设计模式:单一职责原则在软件开发中的应用
【10月更文挑战第8天】 在软件开发中,设计模式是解决常见问题的经验总结,而单一职责原则作为面向对象设计的基本原则之一,强调一个类应该只有一个引起变化的原因。本文将探讨单一职责原则在PHP中的应用,通过实际代码示例展示如何运用该原则来提高代码的可维护性和可扩展性。
34 1
|
3天前
|
设计模式 JSON 前端开发
前端必须掌握的设计模式——适配器模式
适配器模式是一种结构型设计模式,用于使接口不兼容的对象能够相互合作。通过在客户端和系统之间引入一个“中间层”适配器,将不同类型的输入数据转换为系统能处理的标准格式,减轻系统的负担,提高扩展性和可维护性。例如,MacBook的扩展坞将多种接口(如HDMI、USB)转换为Type-C接口,实现多接口兼容。
|
1月前
|
设计模式 缓存 数据库连接
深入理解PHP的面向对象编程与设计模式####
本文旨在通过实例解析PHP中面向对象编程的核心概念及其在实际开发中的应用,特别是单例模式、工厂模式和观察者模式等常见设计模式。文章将展示这些模式如何帮助开发者构建更加灵活、可维护的代码结构,以及它们在解决具体问题时的优势。 ####
|
1月前
|
设计模式 存储 数据库连接
PHP中的设计模式:单例模式的深入理解与应用
【10月更文挑战第22天】 在软件开发中,设计模式是解决特定问题的通用解决方案。本文将通过通俗易懂的语言和实例,深入探讨PHP中单例模式的概念、实现方法及其在实际开发中的应用,帮助读者更好地理解和运用这一重要的设计模式。
20 1
|
2月前
|
设计模式 PHP 开发者
PHP中的设计模式:桥接模式的解析与应用
在软件开发的浩瀚海洋中,设计模式如同灯塔一般,为开发者们指引方向。本文将深入探讨PHP中的一种重要设计模式——桥接模式。桥接模式巧妙地将抽象与实现分离,通过封装一个抽象的接口,使得实现和抽象可以独立变化。本文将阐述桥接模式的定义、结构、优缺点及其应用场景,并通过具体的PHP示例代码展示如何在实际项目中灵活运用这一设计模式。让我们一起走进桥接模式的世界,感受它的魅力所在。
|
2月前
|
设计模式 算法 数据库连接
PHP中的设计模式:提高代码的可维护性和扩展性
【10月更文挑战第13天】 本文将探讨PHP中常见的设计模式及其在实际项目中的应用。通过对比传统编程方式,我们将展示设计模式如何有效地提高代码的可维护性和扩展性。无论是单例模式确保类的单一实例,还是观察者模式实现对象间的松耦合,每一种设计模式都为开发者提供了解决特定问题的最佳实践。阅读本文后,读者将能更好地理解和应用这些设计模式,从而提升PHP编程的效率和质量。
|
2月前
|
设计模式 存储 数据库连接
PHP中的设计模式:单例模式的深入解析与实践
在PHP开发中,设计模式是提高代码可维护性、扩展性和复用性的关键技术之一。本文将通过探讨单例模式,一种最常用的设计模式,来揭示其在PHP中的应用及优势。单例模式确保一个类仅有一个实例,并提供一个全局访问点。通过实际案例,我们将展示如何在PHP项目中有效实现单例模式,以及如何利用这一模式优化资源配置和管理。无论是PHP初学者还是经验丰富的开发者,都能从本文中获得有价值的见解和技巧,进而提升自己的编程实践。
|
2月前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与实践
【10月更文挑战第9天】 策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在PHP开发中,通过使用策略模式,我们可以轻松切换算法或逻辑处理方式而无需修改现有代码结构。本文将深入探讨策略模式的定义、结构以及如何在PHP中实现该模式,并通过实际案例展示其应用价值和优势。
38 1
|
2月前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与应用
【10月更文挑战第8天】 在软件开发的浩瀚宇宙中,设计模式如同星辰指引,照亮了代码设计与架构的航道。本文旨在深入探索PHP语境下策略模式(Strategy Pattern)的精髓,不仅剖析其内核原理,还将其融入实战演练,让理论在实践中生根发芽。策略模式,作为解决“如何优雅地封装算法族”的答案,以其独特的灵活性与扩展性,赋予PHP应用以动态变换行为的能力,而无需牵动既有的类结构。
38 2
|
2月前
|
设计模式 缓存 数据库连接
探索PHP中的设计模式:单例模式的实现与应用
在PHP开发中,设计模式是提高代码可复用性、可维护性和扩展性的重要工具。本文将深入探讨单例模式(Singleton Pattern)的基本概念、在PHP中的实现方式以及实际应用场景。单例模式确保一个类仅有一个实例,并提供全局访问点。通过具体代码示例和详细解释,我们将展示如何在PHP项目中有效利用单例模式来解决实际问题,提升开发效率和应用性能。