总结
豆包 AI 助手文章总结

PHP 兑现适配器(Adapter)模式

php中文网
发布: 2016-06-13 10:55:10
原创
1008人浏览过

PHP 实现适配器(Adapter)模式

适配器模式核心思想:把对某些相似的类的操作转化为一个统一的“接口”(这里是比喻的说话)--适配器,或者比喻为一个“界面”,统一或屏蔽了那些类的细节。适配器模式还构造了一种“机制”,使“适配”的类可以很容易的增减,而不用修改与适配器交互的代码,符合“减少代码间耦合”的设计原则。

??? 以下示例,用接近伪码的 php 语法,演示了一个数据库操作的适配器类,它可以操作 mysqloracle 数据库,但使用了相同的方法。由于使用了适配器(adapter)模式,我们不必关心 mysql 和 oracle 数据库操作类的不同。

??? 我们还可以方便的添加进 sqlite 等数据库操作的类,“插入”适配器中,立即就可以用操作 mysql 和 oracle 相同的方法来操作 sqlite 数据库了。

??? //适配器类:
??? //定义了4个操作所有数据库的方法

<?phpclass 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 类}?>
登录后复制
?
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
相关标签:
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号