资讯专栏INFORMATION COLUMN

也说设计模式-----适配器模式

ls0609 / 1957人阅读

摘要:我为自己网站设计的框架中模型层封装数据库也用到了适配器模式。一句话描述适配器就是利用继承,暴露相同接口。

适配器模式是最容易理解的设计模式之一,应用也很广泛,常见的应用场景有数据库底层连接的封装和高速缓存类底层封装等等,在开源程序中常见框架都有适配器模式的应用,例如thinkphp中模型基类封装的数据连接。我为自己网站(www.ruanpower.com)设计的框架LEAFMVC中模型层封装数据库也用到了适配器模式。

一句话描述:适配器就是利用继承,暴露相同接口。

作用:一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,暴露共同的接口去调用

组成方式:1个接口(指定被暴露的共同方法),若干具体实现

伪代码演示:设计一个无缝切换mysqli数据库连接或者pdo数据库连接的程序,业务逻辑无需了解底层数据库的连接方式,只需要调用db对象方法即可

</>复制代码

  1. //数据库接口
  2. interface IDb {
  3. //连接数据库
  4. function connect();
  5. function query();
  6. function exec();
  7. function select();
  8. function insert();
  9. function delete();
  10. function update();
  11. }

</>复制代码

  1. //mysqli模式数据库连接适配器
  2. class MysqliAdapter implements IDb {
  3. function connect() {
  4. //youcode
  5. }
  6. function query() {
  7. //youcode
  8. }
  9. function exec() {
  10. //youcode
  11. }
  12. function select() {
  13. //youcode}
  14. }
  15. function insert() {
  16. //youcode}
  17. }
  18. function delete() {
  19. //youcode}
  20. }
  21. function update() {
  22. //youcode}
  23. }
  24. }

</>复制代码

  1. //pdo模式数据库连接适配器
  2. class PdoAdapter implements IDb {
  3. function connect() {
  4. //youcode
  5. }
  6. function query() {
  7. //youcode
  8. }
  9. function exec() {
  10. //youcode
  11. }
  12. function select() {
  13. //youcode}
  14. }
  15. function insert() {
  16. //youcode}
  17. }
  18. function delete() {
  19. //youcode}
  20. }
  21. function update() {
  22. //youcode}
  23. }
  24. }

</>复制代码

  1. //你自己的业务逻辑
  2. class Business {
  3. public $db;
  4. public function __construct() {
  5. $this->dbFactory("pdo");
  6. }
  7. //你自己的方法
  8. function business() {
  9. $sql = "SELECT * FRROM user WHERE nickname = "mgckid" ";
  10. $result = $this->db->select($sql);
  11. return $result;
  12. }
  13. //数据库工厂方法(勉强称之为)
  14. private function dbFactory($dbtype) {
  15. switch ($dbtype) {
  16. case "mysqli":
  17. $this->db = new MysqliAdapter();
  18. break;
  19. case "pdo":
  20. $this->db = new PdoAdapter();
  21. break;
  22. }
  23. }
  24. }

</>复制代码

  1. //获取结果
  2. $business = new business();
  3. $data = $business->business();

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21136.html

相关文章

  • 【开发调试】谷歌浏览器中调试移动网页和测试网速下页面效果

    摘要:今天有幸给大家分享一下谷歌浏览器针对移动网页测试的技巧,主要是最近做个微信公共号网站。今天就简单分享下在谷歌浏览器测试页面的适配和网速限制展示。、 今天有幸给大家分享一下谷歌浏览器针对移动网页测试的技巧,主要是最近做个微信公共号网站。所以就要对页面测试拉。移动网页我们最长测得就是各种手机大小的页面效果和出现网络问题的效果展示。 今天就简单分享下在谷歌浏览器测试页面的适配和网速限制展示。 页...

    番茄西红柿 评论0 收藏0
  • 聊聊Tomcat的架构设计

    摘要:本篇文章主要是跟大家聊聊的内部架构体系,让大家对有个整体的认知。方法会创建一个对象,调用它的方法将字节流封装成对象,在创建组件时,会将组件添加到组件中组件而组件在连接器初始化时就已经创建好了目前为止,只有一个实现类,就是。 微信公众号「后端进阶」,专注后端技术分享:Java、Golang、WEB框架、分布式中间件、服务治理等等。 老司机倾囊相授,带你一路进阶,来不及解释了快上车! T...

    cnio 评论0 收藏0
  • Web语义化标准解读

    摘要:为什么说最佳实践是呢简单来说,就是这类预处理器在提供一定的抽象能力的同时,也不会破坏自身的特性。就语义化这件事情而言,如果你的是基于标准来编写的,意味着你的页面具备更多的可能性。 原文:https://github.com/kuitos/kuitos.github.io/issues/33 15年年末写了篇关于BEM方法论(实践上内容并不是原BEM)的文章,文末给自己挖了个坑说要聊聊w...

    vspiders 评论0 收藏0

发表评论

0条评论

ls0609

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<