2009-05-25 15 views
13

Estoy luchando con la implementación del patrón de diseño del puente (o una alternativa como adaptador) en PythonPython: ¿cómo implementar el patrón de diseño Bridge (o Adapter)?

Quiero ser capaz de escribir código como este para volcar los esquemas de bases de datos en base a una dirección URL suministrada:

urls = ['sqlite://c:\\temp\\test.db', 'oracle://user:[email protected]_name']; 
for url in urls: 
    db = Database(url); 
    schema = db.schema() 

clases Tengo definen como

class Database(): 
    def __init__(self, url): 
     self.db_type = string.split(self.url, "://")[0] 

class Oracle(): 
    def schema(self): 
     # Code to return Oracle schema 

class SQLite(): 
    def schema(self): 
     # Code to return SQLite schema 

¿Cómo puedo "pegamento" estas 3 clases juntos para que pueda obtener el primer bloque de código para ejecutar correctamente? He buscado en Google en todo, sino que debe ser teniendo un día de grosor, ya que simplemente no está confluyendo en mi mente ...

Gracias de antemano

Respuesta

25

utilizar un patrón de fábrica en su lugar:

class Oracle(object): 
    ... 

class SQLite(object): 
    ... 

dbkind = dict(sqlite=SQLite, oracle=Oracle) 

def Database(url): 
    db_type, rest = string.split(self.url, "://", 1) 
    return dbkind[db_type](rest) 
+0

Gracias Alex - ¡funciona perfectamente! – Dave

+0

De nada, Dave, pero en ese caso, ¿por qué no aceptas la respuesta? –

+0

¿Hay alguna ventaja de usar dict (sqlite = SQLite) sobre {'sqlite': SQLite}? ¿O es solo una cuestión de estilo? –