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