我有以下代码:
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
类以添加诸如lives
,works
之类的方法。
我知道可以使用继承,但是PersonAddressBuilder
从PersonJobBuilder
继承是没有意义的。
那么,还有哪些其他解决方案可用?
减少类之间依赖关系的一种典型方法是不使用继承,而是使用混合模型。
该方法与您喜欢的鸭式方法非常吻合,但必须确保在混合对象之间不重复字段和方法名称。