Подтвердить что ты не робот

Python - как реализовать шаблон дизайна Bridge (или Adapter)?

Я борюсь с внедрением шаблона проектирования Bridge (или альтернативы, такого как Adapter) в Python

Я хочу иметь возможность писать такой код, чтобы сбрасывать схемы базы данных на основе поставляемого URL:

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

У меня есть классы, определенные как

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

Как я могу "склеить" эти 3 класса вместе, чтобы я мог правильно выполнить первый блок кода? Я гугл, но, должно быть, у меня день толстый, потому что он просто не приходит в голову...

Заранее спасибо

4b9b3361

Ответ 1

Используйте вместо этого шаблон Factory:

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)