如何将外部类用于策略模式?

时间:2010-12-06 16:13:44

标签: oop design-patterns strategy-pattern

我为扑克手历史文件解析器(PHP或Java代码)实现了策略模式。我有一个问题是为几种策略使用的类和对象创建一个干净的OOP方式。

在现实生活中:

我有一个有手牌的游戏

class Hand
{
    ... // attributes for all strategies 
    ... // (in fact : attributes that define the "core" of a Hand)
}
class Game
{
    Hand hands[];
}

一种策略将创建一个对象Game和Hands

class StrategyA implements IStrategy // strategy pattern    
{
    Game game;
    function Parse()
    {
        game = new Game();
        ...
    }
}

此策略需要游戏和每只手的特定属性 我不能将这些属性放入手或游戏中,尽管只使用一种策略而不是其他策略。 我的问题是:什么是最好的OOP方式?为策略创建特定的类?

class HandForStrategyA extends Hand
{
    Int x; // useful only in the strategy A context
}
class StrategyA
{
    Game game;
    HandForStrategyA hands[];
}

这似乎是一个明显的答案,但我仍然想知道是否有更好的方法。此外,我有语义问题:我应该给我的班级什么样的名字(HandFor ...感觉很糟糕!)。 我是一名老派程序员,非常程序化,我失去了很多时间来考虑“干净”的OOP!

1 个答案:

答案 0 :(得分:1)

你自己回答了这个问题“并且这个策略将需要特定的属性用于游戏和手牌”。你写了一个策略,属性将成为这个策略的一部分。