在PHP5中将单身人士设计模式与工厂方法模式结合使用的最佳方法是什么?我最简单的使用场景是每个数据库类型仅实例化选择性数据库连接一次。在PHP5中与工厂模式结合的单身人士
4
A
回答
10
单工厂DB连接:
class Registry
{
private static $_objects;
public static function set($key, $object)
{
if (!array_key_exists($key, self::$_objects)) self::$_objects[$key] = $object;
}
public static function get($key)
{
if (array_key_exists($key, self::$_objects)) return self::$_objects[$key];
else return false;
}
}
class DBFactory
{
public static function getConnection($type)
{
switch ($type) {
case 'pdo':
if (!(Registry::get('DB_PDO') instaceof DbPdo)) Registry::set('DB_PDO', new DbPdo('user', 'pass', ...));
return Registry::get('DB_PDO')
case 'mssql':
//same for other connections
//...
}
}
}
用法:
$factory = DBFactory::getConnection('pdo');
单身是不是真的需要了,因为所有的方法都可以静态调用... 但数据库类尚可被认为是单身人士,因为在你的应用程序中只有一个实例。
因此,通过使用工厂和注册表模式创建相同的效果。
注册表可以通过使您的数据库类单身然后工厂看起来像这样被替换:
class DBFactory
{
public static function getConnection($type)
{
switch ($type) {
case 'pdo':
return DbPdo::getInstance('user', 'pass', ...);
case 'mssql':
//same for other connections
//...
}
}
}
class DbPdo
{
private static $_instance;
private function __construct($user, $pass, ...){ //instantiate object }
public static function getInstance($user = null, $pass = null, ...)
{
if (!(self::$_instance instanceof DbPdo)) self::$_instance = new DbPdo($user, $pass, ...);
return self::$_instance;
}
}
所以,你必须让所有的数据库的选择对象,单身或使用注册表。我个人会使用注册表,因为它可以用来存储任何类型的对象,即使是不想让该类成为单例的对象。
设计选择总是受到个人风格的影响...
相关问题
- 1. 单身人士设计模式在PHP
- 2. 我的单身人士模板真的是单身人士吗?
- 3. 在YuGiOh游戏中,我可以在单身人士或工厂模式之间使用什么模式?
- 4. ThreadLocal与单身人士
- 5. RequireJS中的单身人士
- 6. ASP.NET中的单身人士
- 7. Python中的单身人士
- 8. iOS中的单身人士
- 9. 由Singleton包装的单身人士或非单身人士
- 10. 为什么java.lang.Runtime是单身人士?单身人士的要求?
- 11. 你如何将抽象工厂与单体模式相结合?
- 12. 单身人士在di.dart
- 13. 抽象工厂设计模式:为什么需要与单身人士一起使用
- 14. 与Windows 7的java单身人士
- 15. OOD:将工厂模式与策略模式结合使用
- 16. 结合泛型MVP模式与抽象工厂模式
- 17. C#:单身人士使用单身人士
- 18. RavenDB的单身人士DocumentStore
- 19. Embeded RavenDb的单身人士
- 20. 单身人士的后果
- 21. 单身人士不按要求工作
- 22. 骨干模型是单身人士吗?
- 23. 听众与加入单身人士
- 24. 性能:asp.net缓存与单身人士
- 25. 与单身人士相互包容
- 26. 单身人士与核心数据
- 27. 犀牛与单身人士嘲笑
- 28. 单身人士,方法与变量
- 29. 与单身人士死锁错误
- 30. 在Swift中创建单身人士
您是否在寻找示例实现或实现这些模式的方法? – NDM 2009-11-30 06:49:05
不,我正在寻找有效的(在速度方面)这些模式的实现。我知道没有什么特定的答案,但我相信最好的方法来改进某些东西,学习别人的做法。 – 2009-11-30 09:39:45