设计模式构建器/属性错误

问题描述

我想使用构建器和原型模式创建简单的应用程序来建造不同的房子。

(1) 修改程序,我在create_house方法添加了name self._builder.name()属性,为我们设置了房子的名字。 但是,意外收到错误AttributeError: 'House1' object has no attribute 'name'。我不知道为什么会发生这种情况,因为我认为我已经正确定义了所有内容

    class Director():
    def __init__(self,builder):
        self._builder = builder

    def create_house(self):
        self._builder.name()
        self._builder.create_new_house()
        self._builder.add_basement()
        self._builder.add_rooms()
        self._builder.add_roof()

    def get_house(self):
        return self._builder.house


class Builder():

    def __init__(self):
        self.house = None

    def create_new_house(self):
        self.house = House()


class House1(Builder):
    def add_name(self):
        self.house.name = 'house1'

    def add_basement(self):
        self.house.basement = 'with basement'

    def add_roof(self):
        self.house.roof = 'wood roof'

    def add_rooms(self):
        self.house.rooms = 3


class House2(Builder):
    def add_name(self):
        self.house.name = 'house2'

    def add_basement(self):
        self.house.basement = 'no basement'

    def add_roof(self):
        self.house.roof = 'brick roof'

    def add_rooms(self):
        self.house.rooms = 5

class House():

    def __init__(self):
        self.name = None
        self.basement = None
        self.roof = None
        self.rooms = None

    def __str__(self):
        return 'Building: {} {},{},and {} room'.format(self.name,self.basement,self.roof,self.rooms)


builder = WoodHouse()
director = Director(builder)
director.create_house()
house = director.get_house()
print(house)

(2) 顺便问一下,我是否可以改进(少写)称为“建造”房屋的过程。 我的意思是这段代码,如果我创建,例如,3 个这样的房子,我必须重复它,但是,这是非常不可读和不方便的。

builder = WoodHouse()
    director = Director(builder)
    director.create_house()
    house = director.get_house()
    print(house)

解决方法

只需使用 for 循环。

for builder in [WoodHouse(),BrickHouse()]:
    director = Director(builder)
    director.create_house()
    house = director.get_house()
    print(house)