我正在观看有关Python的编程挑战的YouTube视频,在某一时刻,他们提到了类似“可以与Builder Patron实施”之类的内容。
这是我在Java的时间,在那里度过了一年[在这里插入我不记得]。那时,您的资历是由数量的数量以及如何实施它们来定义的。他们是美好的岁月,因为当您了解每个人时,您意识到没有他们,我再也无法生存。
建筑商的赞助人或如何建造东西。
这个设计赞助人旨在从事由许多属性组成的课程,我们并不总是想启动所有属性。
因此,借助著名的所有设定者的基础,创建了建筑商赞助人,该建筑商允许通过所有指向独立形式的属性的人来“部分构建”一个对象。这基本上是一组复杂的播放器。
实施
如果您想跳入完成的示例,我将离开我在Python的翼源存储库的archivo。现在让我们继续逐步。
性别产生英雄
class Hero:
def __init__(self, name):
self.name = name
self.hp = 100
self.money = 10
self.attack = 0
self.defense = 0
def __str__(self):
return f"Hero: {self.name} | 💰{self.money} ⚔{self.attack} 🛡{self.defense}"
然后出于明显的原因构建 Herobuilder im>。
class HeroBuilder:
def __init__(self, name):
self.hero = Hero(name)
这是事物变得有趣的地方:定义我们的英雄的攻击,我们将在同一建筑商中创建一个二传手:
def set_attack(self, attack):
self.hero.attack = max(attack, 0)
return self
我通过调用 self.hero 来定义英雄的攻击,因为它是在我的构建器中初始化的对象。但是返回 self ,这可能会使许多人感到困惑。
这个想法是返回对象本身,因此这使我们能够在实例中继续工作。许多人可以告诉我:但是我可以用一个对象英雄及其各自的播放器做同样的事情。这样的东西:
hero = Hero("Tomas")
hero.set_attack(10)
hero.set_defense(5)
是的,但是您无法以这种方式链接它们:
hero.set_attack(10).set_defense(5)
这就是为什么我们需要返回 self 的原因,在我们的情况下,这将返回英雄本身。但是让我们继续以一个示例:
def add_money(self, money):
self.hero.money += max(money, 0)
return self
这个mâ©everyther Everything是一个增加的二传手,因为我们可以调用它并增加每次呼叫的金钱(只要它的值大于零)。
def get_hero(self):
return self.hero
最后,这个世界将返回对象英雄,我们与我们的建筑商进行了修改。问题是:我们如何实施?
builder = HeroBuilder("Tomas")
builder.set_attack(5).set_defense(10)
builder.add_money(10).add_money(20).add_money(30)
hero = builder.get_hero()
print(hero)
首先,我们将构建器对象放置。然后,我们按照自己的意愿称呼很多。他们可以注意到我所说的 add_money 大约三遍,这表明了这位赞助人的灵活性。另一方面,他们注意到大家如何拥有所有这些:当然,他们在使用的许多库中看到了这种实现。建筑商的赞助人无处不在,并且是自定义对象时存在的强大顾客之一。
您最终可以观察我的英雄对象如何声明,然后在屏幕上打印。这将导致以下内容:
Hero: Tomas | 💰70 ⚔5 🛡10
结论
我发现玩物体并给他们我的形状非常有趣。这种设计模式使我没有任何限制,因为正如我之前所说,这是一种与二传手合作的有效方法。
我希望您喜欢这种交付,不要忘记喜欢并分享它,以夸耀您现在知道另一种有趣的设计模式!