《Python面向对象编程指南》——1.9 不带

    xiaoxiao2024-04-05  124

    本节书摘来自异步社区《Python面向对象编程指南》一书中的第1章,第1.9节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

    1.9 不带__init__()方法的无状态对象

    以下是一个不需要__init__()方法的类定义。对于策略模式的对象来说这是常见的设计。一个策略对象以插件的形式复合在主对象上来完成一种算法或逻辑。它或许依赖主对象中的数据,策略对象自身并不携带任何数据。通常策略类会和享元设计模式一起使用:在策略对象中避免内部存储。所有需要的值都从策略对象的方法参数传入。策略对象自身是无状态的,可以把它看作是一系列函数的集合。

    这里定义了一个类给Player实例提供游戏模式的选择,以下这个策略包括了拿牌和下调投注。

    class GameStrategy:   def insurance( self, hand ):     return False   def split( self, hand ):     return False   def double( self, hand ):     return False   def hit( self, hand ):     return sum(c.hard for c in hand.cards) <= 17

    每个函数需要传入已有的Hand对象。函数逻辑所需的数据基于现有的可用信息,意味着数据会来自庄家和玩家手中的牌。

    我们可以创建一个单例的策略对象给多个玩家实例来调用。

    dumb = GameStrategy()

    我们也可以根据 21 点给玩家提供的不同玩法,考虑定义一系列像这样的策略对象。

    相关资源:敏捷开发V1.0.pptx
    最新回复(0)