在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