我在Python代码中使用了一个外部工具。为了初始化这个工具,我必须创建几个对象。所讨论的外部工具提供了两个完全不同的api,这些api中没有一个能够创建工具所需的所有对象。比如说,这个工具是trafic simulation tool,其中汽车对象是使用API 1创建的,自行车是使用API 2创建的。你知道吗
我玩过继承的游戏,试图选择一个合适的设计模式,但是我所有的解决方案看起来都很难看。你知道吗
最简单的表达方式是:
class ObjectHandler():
api_1_types = ('type1', 'foo')
api_2_types = ('type2', 'bar')
def __init__(self):
self.handler1 = ObjectHandler1()
self.handler2 = ObjectHandler2()
def create(self, obj_type):
if obj_type in self.api_1_types:
return self.handler1.create()
elif obj_type in self.api_2_types:
return self.handler2.create()
else:
raise NotImplementedError
class ObjectHandler1():
def __init__(self):
# load external module that defines API 1
def create(self):
# return an object created via API 1
class ObjectHandler2():
def __init__(self):
# load external module that defines API 2
def create(self):
# return an object created via API 2
if __name__ == '__main__':
handler = ObjectHandler()
object_1 = handler.create('type1') # must be created by ObjectHandler1
object_2 = handler.create('type2') # must be created by ObjectHandler2
我现在正在寻找一个好的OO和pythonic方法来实现这一点。你知道吗
你的方法看起来不错。应该在测试中使用集合,但这并不重要。另一种选择可能是以下,但我不知道是否更好:
以及
相关问题 更多 >
编程相关推荐