工厂方法模式

来源:互联网 发布:华侨大学hqu网络 编辑:程序博客网 时间:2024/06/09 23:39

简单工厂(静态工厂方法)

//共同接口
interface db{
    function conn();
}

//服务端开发,(不知道将会被谁调用)
class dbmysql implements db{
    public function conn(){
        echo '连接上了mysql';
    }
}

class dbsqlite implements db{
    public function conn(){
        echo '连接上了sqlite';
    }
}

//PHP设计模式
class Factory{
    public static function createDB($type){
        if($type=='mysql'){
            return new dbmysql();
        }else if($type =='sqlite'){
            return new dbsqlite();
        }else{
            throw new Exception('Error db type');
        }
    }
}

/**
 * 服务端现在不知道有哪些类名了
 * 只知道对方开发了一个Factory::createDB的方法
 * 方法只允许传递数据库名称
 */
$mysql = Factory::createDB('mysql');
$mysql->conn();

$sqlite = Factory::createDB('sqlite');
$sqlite->conn();





工厂方法模式


//共同接口

interface db{
    function conn();
}
interface Factory{
    function createDB();
}

//服务端开发,(不知道将会被谁调用)
class dbmysql implements db{
    public function conn(){
        echo '连接上了mysql';
    }
}

class dbsqlite implements db{
    public function conn(){
        echo '连接上了sqlite';
    }
}

class mysqlFactory implements Factory{
    public function createDB(){
        return new dbmysql();
    }
}

class sqliteFactory implements Factory{
    public function createDB(){
        return new dbsqlite();
    }
}

//客户端开始
$fact = new mysqlFactory();
$db = $fact->createDB();
$db->conn();

$fact = new sqliteFactory();
$db = $fact->createDB();
$db->conn();

//服务器端添加oracle类,对前面的数据不发生修改
class dboracle implements db{
    public function conn(){
        echo '连接上了oracle';
    }
}

class oracleFactory implements Factory
{
    public function createDB()
    {
        return new dboracle();
    }
}

$fact = new oracleFactory();
$db = $fact->createDB();
$db->conn();
0 0
原创粉丝点击