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 点给玩家提供的不同玩法,考虑定义一系列像这样的策略对象。
时间: 2024-12-23 13:55:16