遵循开-关原则的生成器模式



我有以下代码:

class Person:
def __init__(self):
# address
street = None
post_code = None
city = None
# empoyment
company_name = None
position = None

class PersonBuilder:
def __init__(self, person=Person()):
self.person = person
def build(self):
return self.person
@property
def works(self):
return PersonJobBuilder(self.person)
@property
def lives(self):
return PersonAddressBuilder(self.person)

class PersonJobBuilder(PersonBuilder):
def __init__(self, person):
super().__init__(person)
def at(self, company):
self.person.company_name = company
return self

class PersonAddressBuilder(PersonBuilder):
def __init__(self, person):
super().__init__()
def city(self, city):
self.person.city = city
return self
pb = PersonBuilder()
person = pb
.works 
.at('Cora')
.lives 
.city('Kandu')
.build()

上面的代码不尊重开-关原则,因为每次我想添加新的构建器时,我都需要更改PersonBuilder类以添加livesworks等方法。

我知道可以使用继承,但PersonAddressBuilderPersonJobBuilder继承没有意义。

那么,还有哪些其他解决方案可用?

减少类之间依赖关系的一种典型方法是不使用继承,而是使用mixin模型。

这种方法与您喜欢的鸭子类型方法非常一致,但代价是必须确保字段和方法名称不会在 mixins 中重复 - 当范围很窄时不是问题;有时当你设计混合供不同类重用时会是一个问题。

相关内容

  • 没有找到相关文章

最新更新