PHP 兑现适配器(Adapter)模式
PHP 实现适配器(Adapter)模式
适配器模式核心思想:把对某些相似的类的操作转化为一个统一的“接口”(这里是比喻的说话)--适配器,或者比喻为一个“界面”,统一或屏蔽了那些类的细节。适配器模式还构造了一种“机制”,使“适配”的类可以很容易的增减,而不用修改与适配器交互的代码,符合“减少代码间耦合”的设计原则。
??? 以下示例,用接近伪码的 PHP 语法,演示了一个数据库操作的适配器类,它可以操作 MySQL 和 Oracle 数据库,但使用了相同的方法。由于使用了适配器(Adapter)模式,我们不必关心 MySQL 和 Oracle 数据库操作类的不同。
??? 我们还可以方便的添加进 SQLite 等数据库操作的类,“插入”适配器中,立即就可以用操作 MySQL 和 Oracle 相同的方法来操作 SQLite 数据库了。
??? //适配器类:
??? //定义了4个操作所有数据库的方法
<?php class Db_adapter { private $db; function __construct($db_obj) { $this->db = $db_obj; } function select_record() { $this->db->select (); } function insert_record() { $this->db->insert (); } function update_record() { $this->db->update (); } function delete_record() { $this->db->delete (); } } //MySQL 数据库操作类: class Mysql { private $obj_mysql; function __construct() { $obj_mysql = ...... ; } function select() { $obj_mysql->mysql_select (); } function insert() { $obj_mysql->mysql_insert (); } function update() { $obj_mysql->mysql_update (); } function delete() { $obj_mysql->mysql_delete (); } } //Oracle 数据库操作类: class Oracle { private $obj_oracle; function __construct() { $obj_oracle = ...... ; } function select() { $obj_oracle->oracle_select (); } function insert() { $obj_oracle->oracle_insert (); } function update() { $obj_oracle->oracle_update (); } function delete() { $obj_oracle->oracle_delete (); } } //操作 MySQL 数据库: $obj = new Db_adapter(new Mysql()) $obj->select_record (); $obj->insert_record (); $obj->update_record (); $obj->delete_record (); //操作 Oracle 数据库: $obj = new Db_adapter(new Oracle()) $obj->select_record (); $obj->insert_record (); $obj->update_record (); $obj->delete_record (); ?>
???? 要求:MySQL、Oracle 类,有相同名字、相同个数的方法。方法内部实现了各自的操作数据库的代码。转换就是在这里完成的。
??? 增加新的数据库操作:构造新的类,有相同名字、相同个数的方法。方法内部实现不被关心(被屏蔽) - 不同的数据库实现不同。
??? 小缺点:新的类,可能因为疏忽,导致方法名字不合要求、个数不同。
??? 为了减少出错的可能,可以改进一下。方法就是定义一个接口,作为模板来继承,达到规范化。
??? db_adapter 类里的方法,只需要使用 interface db_driver 里函数即可。
<?php //定义一个接口, interface Db_driver { function select(); function insert(); function update(); function delete(); } // 数据库操作类,比如 MySQL,Oracle 必须实现 db_driver 接口的同名方法,从而进行了规范。 class Mysql implements Db_driver { private $obj_mysql; function __construct() { $obj_mysql = ...... ; } //这里省略的代码同前边的 MySQL 类 } class Oracle implements Db_driver { private $obj_oracle; function __construct() { $obj_oracle = ...... ; } //这里省略的代码同前边的 Oracle 类 } ?>

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Oracle RAC 硬盘新增和替换操作:新增硬盘:添加新磁盘、创建 ASM 磁盘组、添加到集群、移动数据文件。替换硬盘:识别故障硬盘、关闭磁盘组、更换硬盘、重新打开磁盘组、修复故障磁盘、移动数据文件。

Oracle数据库在C盘的藏身之处:注册表:使用注册表编辑器搜索"Oracle",可找到包括安装路径、服务名称等信息。文件系统:Oracle文件散布在C盘多个位置,包括主目录、系统文件、临时文件等。环境变量:Oracle设置的环境变量(如ORACLE_HOME、ORACLE_SID)指向安装目录和实例名称。谨慎操作:卸载Oracle时,不仅要删除文件,还需清理注册表和服务,建议使用官方卸载工具或寻求专业帮助。空间管理:优化磁盘空间,避免将Oracle安装在C盘;定期清理临时文

MySQL 中字段操作指南:添加、修改和删除字段。添加字段:ALTER TABLE table_name ADD column_name data_type [NOT NULL] [DEFAULT default_value] [PRIMARY KEY] [AUTO_INCREMENT]修改字段:ALTER TABLE table_name MODIFY column_name data_type [NOT NULL] [DEFAULT default_value] [PRIMARY KEY]

Oracle 提供多种去重查询方法:DISTINCT 关键字返回每列的唯一值。GROUP BY 子句对结果分组并返回每个分组的非重复值。UNIQUE 关键字用于创建仅包含唯一行的索引,查询该索引将自动去重。ROW_NUMBER() 函数分配唯一数字并过滤出仅包含第 1 行的结果。MIN() 或 MAX() 函数可返回数字列的非重复值。INTERSECT 运算符返回两个结果集的公共值(无重复项)。

Oracle数据库文件系统由多种文件共同构成:数据文件:存储实际数据。控制文件:记录数据库结构信息。重做日志文件:记录数据库修改操作。参数文件:包含数据库参数设置。临时文件:存储中间结果。理解这些文件类型及其之间的关系对于数据库管理和性能调优至关重要。规划文件数量、大小和存储介质可优化性能并确保数据可用性。

Oracle 数据库是一款可靠、可扩展且功能丰富的关系型数据库管理系统(RDBMS)。其架构遵循客户端-服务器模型,包含服务器端组件(Oracle Net)、实例、共享内存区域(SGA)和后台进程,以及存储数据的数据库文件。基本概念包括表、行、列、主键、外键、索引和游标。该数据库以其高可用性、大数据支持、丰富的功能、安全性强和易用性等优势而著称。

要修改 Oracle 字符集,需要:备份数据库;在 init.ora 文件中修改字符集设置;重新启动数据库;修改现有表和列以使用新字符集;重新加载数据;修改数据库链接(可选)。

Oracle 乱码问题通常由字符集设置不当引起。解决方法包括:检查服务器、数据库和客户机字符集。根据需要设置服务器、数据库和客户机字符集。使用 CONVERT 函数或 DBMS_LOB.CONVERT_LOB 函数修复乱码数据。始终指定字符集并正确设置 NLS 参数。
