Home  >  Article  >  Backend Development  >  关于工厂模式的有关问题

关于工厂模式的有关问题

WBOY
WBOYOriginal
2016-06-13 13:33:55991browse

关于工厂模式的问题
Example #1 调用工厂方法(带参数)
class Example
{
  // The parameterized factory method
  public static function factory($type)
  {
  if (include_once 'Drivers/' . $type . '.php') {
  $classname = 'Driver_' . $type;
  return new $classname;
  } else {
  throw new Exception ('Driver not found');
  }
  }
}
?>
按上面的方式可以动态加载drivers。如果Example类是一个数据库抽象类,那么 可以这样来生成MySQL和 SQLite驱动对象:
// Load a MySQL Driver
$mysql = Example::factory('MySQL');

// Load a SQLite Driver
$sqlite = Example::factory('SQLite');
?>


原文地址:
http://www.php.net/manual/zh/language.oop5.patterns.php


我想了解,这种模式有什么作用

而且,包含文件的类名前面必须被加上“Driver_" 这个前缀,岂不是很不方便而且有限制性?

这样到底实现了什么动态?

------解决方案--------------------
Driver_MySQL 和 Driver_SQLite 实现同一接口,那么你的程序就不必关心数据库是哪种,方便了将来更换数据库系统(当然SQL语句上可能还存在问题)
至于为什么 Driver_ 当前缀,那是担心会发生类重名,或者是出于方便管理的目的才这样设的。
------解决方案--------------------
这种模式有什么作用...
抽象高于实现,工厂模式在抽象类型创建对象时.使用特定的类来实现.

driver 你不觉得加个前缀很醒目么,要不变量名都用 $a,$b,$c 你觉得能弄明白是做啥的?猜你都没法猜的不是...

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn