Ok ora mi è più chiaro.

Nel tuo primo post hai detto "una specie di factory"... ma perchè non utilizzare una "vera" implementazione di questo pattern? O meglio ancora potresti iniettare l'oggetto stesso della classe che vuoi utilizzare... qualcosa del genere

Codice PHP:
class QWConfiguration
{
    protected 
$object;
    
    public function 
__construct(QWConfig $object)
    {
        
$this->object $object;
    }
    
    public function 
getConfig()
    {
        return 
$this->object->getConfig();
    }
}

abstract class 
QWConfig
{
    protected 
$config;
    protected 
$options;
    
    public function 
__construct($options)
    {
        
$this->options $options;
    }
    
    public function 
getConfig()
    {
        return 
$this->initConfig();
    }
    
    abstract protected function 
initConfig();
}

class 
QWConfigDb extends QWConfig
{
    protected function 
initConfig()
    {
        if (!
$this->config)
        {
            
// mi collego al database usando $this->options['server'] e $this->options['password'] ed eventualmente uso le altri opzioni
            
$this->config sprintf('Dati estrapolati dal db... server => %s e password => %s
'
$this->options['server'], $this->options['password']);
        }
        
        return 
$this->config;
    }
}

class 
QWConfigXml extends QWConfig
{
    protected function 
initConfig()
    {
        if (!
$this->config)
        {
            
// faccio il parsing di un file xml usando $this->options['path'] ed eventualmente uso le altre opzioni
            
$this->config sprintf('Dati ottenuti dal parsing del file xml... path => %s'$this->options['path']);
        }
        
        return 
$this->config;
    }
}

    
$config = new QWConfiguration(new QWConfigDb(array(
        
'server'   => 'localhost',
        
'password' => 'password',
        
'opt_1'    => 'opzione_1',
        
'opt_2'    => 'opzione_2',
        
'opt_N'    => 'opzione_N' 
    
)));
    
    echo 
$config->getConfig();
    
    
$config = new QWConfiguration(new QWConfigXml(array(
        
'path'  => 'percorso/al/file.xml',
        
'opt_1' => 'opzione_1',
        
'opt_2' => 'opzione_2',
        
'opt_N' => 'opzione_N'
    
)));
    
    echo 
$config->getConfig(); 
Ovviamente il mio è solo uno spunto da perfezionare.