PHP設計模式-工廠模式


工廠模式

工廠模式,顧名思義,像工廠的流水線,固定的規格,固定的材料,做固定的事情。

單例模式用戶做數據庫連接,工廠模式適合做數據連后的增刪改查。

絕大部分的架構都會有不同的數據庫驅動,在不同的情況下使用不同的數據庫。

用MySQL和MongoDB做具體的例子:

abstract class DB
{
    abstract public function select();

    abstract public function delete();

    abstract public function insert();

    abstract public function update();
}

class MongoDB extends DB
{
    public function select()
    {
        return 'class:MongoDB function select';
    }

    public function delete()
    {
        return 'class:MongoDB function delete';
    }

    public function insert()
    {
        return 'class:MongoDB function MongoDB';
    }
    public function update()
    {
        return 'class:MongoDB function update';
    }
}

class Mysql extends DB
{
    public function select()
    {
        return 'class:Mysql function select';
    }

    public function delete()
    {
        return 'class:Mysql function delete';
    }

    public function insert()
    {
        return 'class:Mysql function insert';
    }
    public function update()
    {
        return 'class:Mysql function update';
    }
}

class factory
{
    public static function factoryOperation($dbType)
    {
        return new $dbType;
    }
}

 

上面是實現的工廠模式,通過調用

factory::factoryOperation('Mysql');

 

 就可以實例化Mysql的操作類,並且實現被抽象類強制規定的增刪改查操作

$factory = factory::factoryOperation('Mysql');
echo $factory->select();
$factory = factory::factoryOperation('MongoDB');
echo $factory->select();

上面的結果分別輸出

 

"class:MongoDB function select"
"class:Mysql function select"

 

 PS:很多人都在問工廠模式為什么用抽象,不用接口,

個人看法:它們在工廠模式時沒有嚴格的區分使用,

  因為接口實現的是行為,比較單一,它完全可以應用的在簡單的工廠模式,

  而抽象類和子類之間有比較寬泛的繼承關系,但是又區別於繼承關系,它在接口的關系上增加部分繼承關系,因此抽象類更重。

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM