热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:php设计模式之适配器模式

篇首语:本文由编程笔记#小编为大家整理,主要介绍了php设计模式之适配器模式相关的知识,希望对你有一定的参考价值。适配器设计模式只是将某个对象的接

篇首语:本文由编程笔记#小编为大家整理,主要介绍了php设计模式之适配器模式相关的知识,希望对你有一定的参考价值。



适配器设计模式只是将某个对象的接口适配为另一个对象所期望的接口.


UML图:

技术分享

说明:
1.MyObject有一个methodA()的公共方法,OrigianConsumer获取MyObject的实例,并在执行doSomething()方法期间,调用methodA()
2.引入NewConsumer,这个类期望在执行doSomething()方法期间,调用MyObject实例的另一个公共方法methodB()
3.通过扩展MyObject,创建一个ObjectAdaper类,像NewConsumer期望的那样,新创建的ObjectAdaper会提供methodB的公共方法,在这个简单的示例中,所有的methodB都会调用methodA

 


场景说明和代码示例:

项目开始我们有个错误类,简单的返回产生的错误!


class ErrorObject
{
private $error;
public function __construct($error)
{
$this->error = $error;
}
public function getError()
{
return $this->error;
}
}
// 日志类
class LogError
{
private $errObject;
public function __construct($errOgb)
{
$this->errObject = $errOgb;
}
public function write()
{
error_log($this->errObject->getError(), 0);
}
}

在最开始我们是这样子使用的:


$error = new ErrorObject(‘404: not found‘);
$log = new LogError($error);
$log->write();

  

后来管理员觉得这样子不好,应该将日志写入一个csv,便于监控软件来生成日志监控图.监控软件需要第一列是数值错误代码,第二列是错误信息.但之前ErrorObject还需要为其他类提供服务.

这时我们就要适配器来解决:


class ErrorAdapter extends ErrorObject
{
private $errorNumber, $errorText;
public function __construct($error)
{
parent::__construct($error);
$parts = explode(‘:‘, $error);
$this->errorNumber = $parts[0];
$this->errorText = $parts[1];
}
public function getErrorNumber()
{
return $this->errorNumber;
}
public function getErrorText()
{
return $this->errorText;
}
}

  

新的日志记录类:


class LogToCsv
{
const CSV_LOCATION = ‘log.csv‘;
private $errorObject;
public function __construct(ErrorAdapter $errObject)
{
$this->errorObject = $errObject;
}
public function write()
{
$line = $this->errorObject->getErrorNumber();
$line .= ‘,‘;
$line .= $this->errorObject->getErrorText();
$line .= "\\n";
file_get_contents(self::CSV_LOCATION, $line);
}
}

  


// 新的调用
$err = new ErrorAdapter(‘501:bad action‘);
$log = new LogToCsv($err);
$log->write();

  

LogToCsv期望从ErrorObject中获取到错误信息的数字标识和错误文本,但因为不便于对ErrorObject进行修改,我们用一个适配器继承了ErrorObject,并提供了LogToCsv期望的两个方法来满足需求.

 





推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 开发笔记:里氏替换原则
    本文由编程笔记#小编为大家整理,主要介绍了里氏替换原则相关的知识,希望对你有一定的参考价值。1.定义:如果对每一个类型为T1的对象o1,都有类型为T2的对象o2, ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • linux location root访问文件夹404_Linux下yum安装PHP7.2+Nginx+Mysql
    一.安装NGINX1.先查看是否安装了第三方软件库:yumlistinstalled|grepepel-release或rpm-qepel-release如果已经安装 ... [详细]
author-avatar
天佑土土土
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有