为什么要使用组合?
Why use composition at all?
当我们可以直接向方法添加依赖时,创建组件并通过它们委托行为的原因是什么?对我来说,后者似乎为改变现有对象的行为敞开了大门,从而创造了更松散的耦合?
Composition/delegation:
class Human:
def __init__(self, legs):
self._legs = legs
def run(self):
self._legs.run()
def walk(self):
self._legs.run()
直接向方法注入依赖:
class Human:
def run(self, legs):
legs.run()
def walk(self, legs):
legs.walk()
告诉我,我为什么要费心作文?
你应该只在有目的的情况下使用组合。在您的示例中,它没有任何用处,因为您可以直接在 legs
上调用方法,根本不用理会 Human
。
扩展您的示例,如果每个 Human
实例都有其自己不同的 legs
实例,组合就有意义了。在这种情况下,您需要跟踪哪个 legs
属于哪个 Human
,第一个示例解决了这个问题。
当我们可以直接向方法添加依赖时,创建组件并通过它们委托行为的原因是什么?对我来说,后者似乎为改变现有对象的行为敞开了大门,从而创造了更松散的耦合?
Composition/delegation:
class Human:
def __init__(self, legs):
self._legs = legs
def run(self):
self._legs.run()
def walk(self):
self._legs.run()
直接向方法注入依赖:
class Human:
def run(self, legs):
legs.run()
def walk(self, legs):
legs.walk()
告诉我,我为什么要费心作文?
你应该只在有目的的情况下使用组合。在您的示例中,它没有任何用处,因为您可以直接在 legs
上调用方法,根本不用理会 Human
。
扩展您的示例,如果每个 Human
实例都有其自己不同的 legs
实例,组合就有意义了。在这种情况下,您需要跟踪哪个 legs
属于哪个 Human
,第一个示例解决了这个问题。