关于工厂模式的有关问题
程序员文章站
2024-04-04 22:03:47
...
关于工厂模式的问题
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 你觉得能弄明白是做啥的?猜你都没法猜的不是...
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 你觉得能弄明白是做啥的?猜你都没法猜的不是...
相关文章
相关视频