下面是工厂的另一种变化,你静态地调用了一个工厂类:
class Product { function getList() { $db =& DbConnectionBroker::getConnection(); //... } } class DbConnectionBroker { function &getConnection() { return new MysqlConnection(DB_USER, DB_PW, DB_NAME); } }
这里DbConnectionBroker::getConnection()产生的效果和前面的一样 ,但这样却很有好处: 我们不必在每个需要连接数据库的类中加入调用new MysqlConnection(DB_USER , DB_PW, DB_NAME)的方法。
当然另一种变化就是引用一个外部工厂对象的资源,和这个对象定义了数据库连接的参数:
class Product { var $_db_maker; function setDbFactory(&$connection_factory) { $this->_db_maker =& $connection_factory; } function getList() { $db =& $this->_db_maker->getConnection(); //... } }
最后,一个工厂可以用一个函数合理的组织,然后实现:
function &make_db_conn() { return new MysqlConnection(DB_USER, DB_PW, DB_NAME); } class Product { function getList() { $bar =& make_db_conn(); //... } }
下面是一个工厂的理想化执行的 UML 类图:

出处:
责任编辑:bluehearts
上一页 php设计模式介绍之工厂模式 [1] 下一页 php设计模式介绍之工厂模式 [3]
◎进入论坛网络编程版块参加讨论
|