дополню пост 34:
new перед DB::factory() - лишнее
Kohana реализует этот паттерн еще удобней. Вместо интерфейсов используется абстрактный класс фабрика, в котором определяются общие методы и плюс в том, что некоторые из них реализуются (не абстрактные методы), но их можно переопределить в самих драйверах.
т.е. делается примерно так:
<?php
abstract class DB {
public static function factory($driver)
{
return new $driver;
}
}
class DB_MySQL extends DB {}
class DB_PDO extends DB {}
class DB_MySQLi extends DB {}
$db = DB::factory('DB_MySQL');