工厂模式

工厂模式,顾名思义,像工厂的流水线,固定的规格,固定的材料,做固定的事情。

单例模式用户做数据库连接,工厂模式适合做数据连后的增删改查。

绝大部分的架构都会有不同的数据库驱动,在不同的情况下使用不同的数据库。

用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:很多人都在问工厂模式为什么用抽象,不用接口,

个人看法:它们在工厂模式时没有严格的区分使用,

  因为接口实现的是行为,比较单一,它完全可以应用的在简单的工厂模式,

  而抽象类和子类之间有比较宽泛的继承关系,但是又区别于继承关系,它在接口的关系上增加部分继承关系,因此抽象类更重。

 

 

 

 

 

 

 

 

 

posted on 2019-12-03 15:06  老冬  阅读(839)  评论(0)    收藏  举报