zoukankan      html  css  js  c++  java
  • php 八大设计模式-适配器模式

    什么叫适配:

    适配器模式其实也是一种为了解耦的设计模式,为了让客户端的调用变得更简单统一,将源接口转换为目标接口的过程封装到特定的过程中,这个过程就叫适配

    目的:

    适配器模式将原本不兼容的接口转换为客户期望的接口,使得原本由于接口不兼容而不能一起工作的类能够一起工作。

    应用场景:

    1. 封装有缺陷的接口设计
    2. 统一多个类的接口设计,比如一个支付系统,有三种不同的支付方式,微信支付、支付宝支付、网银支付,这三种支付的实现方法都不一样,那么我们可以用适配器模式,让他们对外具有统一的方法,这样,我们在调用的时候就非常的方便。
    3. 兼容老版本的接口

    举个例子

    <?php 
    class User {      
        private $name;      
    
        function __construct($name) {      
            $this->name = $name;      
        }      
    
        public function getName() {      
            return $this->name;      
        }
    
    }
    
    interface UserInterface {
    
        function getUserName();
    
    } 
    
    
    class UserInfo implements UserInterface {      
        protected $user;
    
        function __construct($user) {      
            $this->user = $user;
        }
    
        // 新方法
        public function getUserName() {
            return $this->user->getName();      
        }
    
    }  
    
    // 旧方法
    $olduser = new User('达达');      
    echo $olduser->getName()."n";      
    
    
    // 要求换新的方法
    $newuser = new UserInfo($olduser);      
    echo $newuser->getUserName()."n";
    
     ?>

    上面没看懂,没关系,再来一个例子

    <?php
    /**
     * 适配器模式演示代码
     * Target适配目标: IDataBase接口
     * Adaptee被适配者: mysql和mysql_i、postgresql的数据库操作函数
     * Adapter适配器 :mysql类和mysql_i、postgresql类
     */
    
    /**
     * Interface IDatabase 适配目标,规定的接口将被适配对象实现
     * 约定好统一的api行为
     */
    interface IDatabase {
        // 定义数据库连接方法
        public function connect($host, $username, $password, $database);
        // 定义数据库查询方法
        public function query($sql);
        // 关闭数据库
        public function close();
    }
    
    /**
     * Class Mysql 适配器
     */
    class Mysql implements IDatabase {
        protected $connect; // 连接资源
    
        /**
         * 实现连接方法
         *
         * @param $host host
         * @param $username 用户名
         * @param $password 密码
         * @param $database 数据库名
         */
        public function connect($host, $username, $password, $database)
        {
            $connect = mysql_connect($host, $username, $password);
            mysql_select_db($database, $connect);
            $this->connect = $connect;
            //其他操作
        }
    
        /**
         * 实现查询方法
         *
         * @param $sql 需要被查询的sql语句
         * @return mi
         */
        public function query($sql)
        {
            return mysql_query($sql);
        }
    
        // 实现关闭方法
        public function close()
        {
            mysql_close();
        }
    }
    
    /**
     * Class Mysql 适配器
     */
    class Mysqli implements IDatabase {
        protected $connect; // 连接资源
    
        /**
         * 实现连接方法
         *
         * @param $host host
         * @param $username 用户名
         * @param $password 密码
         * @param $database 数据库名
         */
        public function connect($host, $username, $password, $database)
        {
            $connect = mysqli_connect($host, $username, $password, $database);
            $this->connect = $connect;
            //其他操作
        }
    
        /**
         * 实现查询方法
         *
         * @param $sql 需要被查询的sql语句
         */
        public function query($sql)
        {
            return mysqli_query($this->connect, $sql);
        }
    
        // 实现关闭
        public function close()
        {
            mysqli_close($this->connect);
        }
    }
    
    /**
     * Class Postgresql 适配器
     */
    class Postgresql implements IDatabase
    {
        protected $connect; // 连接资源
    
        /**
         * 实现连接方法
         *
         * @param $host
         * @param $username
         * @param $password
         * @param $database
         */
        public function connect($host, $username, $password, $database)
        {
            $this->connect = pg_connect("host=$host dbname=$database user=$username password=$password");
            //其他操作
        }
    
        /**
         * 实现查询方法
         *
         * @param $sql 需要被查询的sql语句
         */
        public function query($sql)
        {
            // 其他操作
        }
    
        // 实现关闭方法
        public function close()
        {
    
        }
    }
    
    
    /**
     * 客户端使用演示
     * 这里以mysql为例
     * 只要模式设计好,不论有多少种数据库,实现和调用方式都是一样的
     * 因为都是实现的同一个接口,所以都是可以随意切换的
     */
    
    $host = 'localhost';
    $username = 'root';
    $password = 'root';
    $database = 'mysql';
    
    //$client = new Postgresql();
    //$client = new Mysql();
    $client = new Mysqli();
    $client->connect($host, $username, $password, $database);
    $result = $client->query("select * from db");
    while ($rows = mysqli_fetch_array($result)) {
        var_dump($rows);
    }
    $client->close();

    这种是不是更好理解一些

  • 相关阅读:
    kali国内更新源
    nmap教程(下)
    nmap教程(上)
    apt-get常用命令
    linux如何制作程序桌面快捷方式
    linux怎么把英文版火狐浏览器改成中文
    百度地图demo
    普元云计算-一起来DIY一个人工智能实验室吧
    普元云计算-拥抱人工智能,从机器学习开始
    普元云计算-Java开发者的PaaS指南
  • 原文地址:https://www.cnblogs.com/fangdada/p/14857471.html
Copyright © 2011-2022 走看看