Пул одиночек (англ. Multiton) похож на паттерн проектирования Одиночка (англ. Singleton), но в отличае отнего позволяет создавать коллекции экземпляров класса и позволяет получать доступ по ключу.
Иногда этот паттерн называют Реестр одиночек.
1: <?php
2:
3: class DB
4: {
5: protected static $instance = array();
6:
7: private function __construct($key)
8: {
9: //connect to $key DB
10: }
11:
12: public static function getInstance($key)
13: {
14: if (is_null(self::$instance[$key])) {
15: self::$instance[$key] = new self($key);
16: }
17: return self::$instance[$key];
18: }
19:
20: public function query($sql)
21: {
22: /* ... */
23: }
24:
25: private function __clone()
26: {
27: }
28:
29: private function __wakeup()
30: {
31: }
32: }
33:
34: $sql = 'some sql';
35: $mysql = DB::getInstance('mysql');
36: $mysql->query($sql);
37: $sqlite = DB::getInstance('sqlite');
38: $sqlite->query($sql);