06月18, 2016

PHP设计模式——简单工厂模式

前言——面向接口开发

想理解简单工厂模式先要了解什么是面向接口开发。举个例子,比如我项目中要实现一个ORM类,那么可以先规定好他的接口

interface db {
    public function conn();
}

class MysqlEngine implements db {

    public function conn()
    {
        // TODO: Implement conn() method.
        echo "Mysql has benn connected";
    }
}

class SqlServerEngine implements db {

    public function conn()
    {
        // TODO: Implement conn() method.
        echo "Sqlserver has benn connected";
    }

}

$db = new  MysqlEngine();
$db->conn();

这样做的好处有以下几点

  • ORM组件的封装人和实际业务的开发者很可能是两个人,如果先规定好接口,就可以让两边同时施工,都对接口负责即可。
  • 当需要其他的存储引擎时,只需继续实现db接口即可,代码也可于实现无缝替换。

但是这样还有一个缺点,就是调用方必须知道ORM封装者起的类名才能进行调用。于是我们引入简单工厂模式

class DbFactory {

    public function getDb($name)
    {
        if ($name == "mysql") return new MysqlEngine();
        else if ($name == "sqlserver") return new SqlServerEngine();
    }

}

$scheduler = new DbFactory();
$db = $scheduler->getDb("mysql");
$db->conn();

这样ORM的封装者就真正的实现了组件代码的隔离,在我们使用PHP框架的时候,通常都是用配置文件中的变量选择存储引擎,背后的实现就是简单工厂模式或是其变形。

本文链接:http://www.qiana.info/post/simple_factory.html

-- EOF --

Comments