【PHP设计模式 03_JianDanGongChang.php】 简单工厂

<?php 
/**
 * 【简单工厂】
 * 之前 02.php 面向接口开发,客户端还是知道了服务器端的所有类。
 * 现在想让客户端只知道一个类,就用工厂。
 */

header("Content-type: text/html; charset=utf-8");

/*共同接口--连接数据库*/
interface db{
    function conn();
}

/*服务端开发,面向上面的接口。(不知道将会被谁调用)*/
class dbmysql implements db{
    public function conn(){
        echo '03-连接上了mysql<br>';
    }
}
class dbsqlite implements db{
    public function conn(){
        echo '03-连接上了sqlite<br>';
    }
}

//定义一个工厂类
class Factory{
    public static function createDB($type){
        if($type=='mysql'){
            $db = new dbmysql();
        }elseif($type=='sqlite'){
            $db = new dbsqlite();
        }else{
            echo 'Error...';
        }
        return $db->conn();
    }
}

/* 客户端开发,现在客户端不知道服务端到底有哪些类名。
 * 只知道对方开放了一个 factory::createDB 方法,
 * 并且方法允许传递数据库名称
 */
Factory::createDB('mysql'); //输出“连接上了mysql”
Factory::createDB('sqlite'); //输出“连接上了sqlite”