Python - как реализовать шаблон проектирования моста (или адаптера)? - PullRequest
14 голосов
/ 25 мая 2009

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

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

urls = ['sqlite://c:\\temp\\test.db', 'oracle://user:password@tns_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 класса вместе, чтобы я мог правильно выполнить первый блок кода? Я гуглил вокруг, но, должно быть, у меня был тяжелый день, потому что он просто не приходит мне в голову ...

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

1 Ответ

26 голосов
/ 25 мая 2009

Вместо этого используйте шаблон 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...