PHP 设计模式九 适配器模式

273 阅读1分钟

「这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战

课程背景

  • 最近完成一个项目 对于代码分层有了一丢丢了解 但是架构设计合理性上存在问题
  • 万物看本质基本功硬 底层知识扎实才能写出更优质的代码 才能走得更远
  • 作为努力奔跑的程序员 又一次的去温习 思考 设计模式等基础的php知识
  • 因为掘金粑粑有奖励,所以把学习的笔记整理记录并分享了出来。

正文开始

适配器字面上的理解是适应各种场景的意思。在PHP开发中会接触到不止一种数据库,而且每一种数据据的链接,关闭,查询等方法都不尽相同。这就导致一个通用性的问题,用不同的数据库就得学习不同数据库的操作数据库方法。如何统一所有数据库的调用方式,这就是适配器模式。 1 创建接口文件 \Liiy\Database\IDatabase.php

<?php
namespace Liiy\Database;

interface IDatabase{
    /**数据库链接 */
    function connect($host, $user, $passwd, $dbbane);

    /**数据库查询方法 */
    function select($sql);

    /**关闭数据库 */
    function close();
}

接口中定义了三个方法,connect用于链接数据库操作,select用于数据库的查询数据,close用于关闭数据库链接。接口中只是定义了方法名,但是未写具体的实现方法。

2 创建不同数据库执行数据操作的具体实现类这里以MySQLi的实现方法进行详细讲解。其余的方法类似。 创建文件 Liiy\Database\MySQLi.php 并实现上面的Idatabase接口

<?php
namespace Liiy\Database;

class MySQLi implements IDatabase{
    
    private $connection;

    function connect($host, $user, $passwd, $dbbane){
 
        $con = mysqli_connect($host, $user,$passwd,$dbbane);
        if (!$con){
            die("连接错误: " . mysqli_connect_error());
        }
        $this->connection = $con;
    }

    function select($sql){
        $result = $this->connection->query($sql);
        
        $res_data = [];
        if ($result->num_rows > 0) {
            while($row = $result->fetch_assoc()) {
                $res_data [] = $row;
            }
        } 

        return $res_data;
    }

    function close(){
        $this->connection->close();
    }
}

这个类中,我们具体实现了接口中定义的三个方法。当然,也可以有更多的方法,只是我们这里是简单的进行演示,讲解原理。

下一章节更精彩