2010-12-06 13 views
1

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

在现实生活中:

我有一个类游戏,其中有手(S)

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

一种策略将创建一个对象,游戏和手

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

而这个策略将需要特定属性的游戏和每只手 我不能把这些属性放到手或游戏中只有一种策略使用,而不是其他策略。 我的问题是:什么是最好的面向对象的方式?为该策略创建特定的类?

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

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

回答

1

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

+0

重要:每个手的特定属性。那么,我必须创建一个继承Hand类的类,只是为了我的策略?有没有其他的方法? – Antoine 2010-12-06 16:20:39