Python - 如何实现Bridge(或Adapter)设计模式?

Dav*_*ave 14 python design-patterns

我正在努力在Python中实现Bridge设计模式(或者像Adapter这样的替代方案)

我希望能够编写这样的代码来根据提供的URL转储数据库模式:

urls = ['sqlite://c:\\temp\\test.db', 'oracle://user:password@tns_name'];
for url in urls:
    db = Database(url);
    schema = db.schema()
Run Code Online (Sandbox Code Playgroud)

我把课程定义为

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
Run Code Online (Sandbox Code Playgroud)

如何将这3个类"粘合"在一起,这样我才能获得正确执行的第一个代码块?我已经用Google搜索了,但一定要有一个厚厚的一天,因为它只是没有在我脑海里聚集在一起......

提前致谢

Ale*_*lli 26

改为使用工厂模式:

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)
Run Code Online (Sandbox Code Playgroud)

  • @statictype,严格来说是一种风格问题:我非常喜欢基于标点符号的替代品的可读类型名(dict,list)(另一个例子:浅层复制带有`list(thewidgets)`的列表,而不是用`thewidgets [:]`).如果您曾经不得不通过电话与客户讨论Perl代码,您可能更好地了解我来自哪里;-). (2认同)