遵循开闭原理的构建器模式

问题描述 投票:0回答:1

我有以下代码:

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继承是没有意义的。

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

python python-3.x design-patterns builder
1个回答
0
投票

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

该方法与您喜欢的鸭式方法非常吻合,但必须确保在混合对象之间不重复字段和方法名称。

© www.soinside.com 2019 - 2024. All rights reserved.