2010-12-06 2 views
1

포커 핸드 기록 파일 파서 (PHP 또는 Java 코드)에 대한 전략 패턴을 구현했습니다. 몇 가지 전략에 사용되는 클래스 및 객체에 대해 깨끗한 OOP 방법을 만드는 데 문제가 있습니다. 실제 생활에서외부 클래스를 전략 패턴으로 사용하는 방법은 무엇입니까?

:

나는 손을 가진 클래스 게임을 (들) 객체의 게임과 손

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

그리고이 전략을 만듭니다

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

한 가지 전략 및 각 핸드에 대한 특정 속성이 필요합니다. 이 속성을 손이나 게임에 넣을 수는 없습니다. 한 가지 전략 만 사용하고 다른 전략은 사용하지 않습니다. 제 질문은 : 최선의 OOP 방식은 무엇입니까? 전략을위한 특정 클래스를 만드시겠습니까?

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

확실한 대답 인 것처럼 보이지만 더 좋은 방법이 있는지 궁금합니다. 게다가, 나는 의미 론적 문제에 봉착하게된다 : 어떤 종류의 이름을 수업에 써야 하는가? (HandFor ... 나쁜 느낌!). 나는 매우 절차적인 프로그래머이며 "깨끗한"OOP에 대해 생각할 시간이 너무 많이 없어졌습니다!

답변

1

당신은 질문을 스스로 대답했습니다. 이 전략은 게임과 손을위한 특정 속성이 필요합니다. 당신은 전략을 쓰고 속성들은이 전략의 일부가 될 것입니다.

+0

중요 : 각 손에 대한 특정 속성. 그래서 저는 전략을 위해서 Hand 클래스를 상속받은 클래스를 생성해야합니까? 다른 방법이 있습니까? – Antoine

+0

전략을 만들 때 일반적으로 전략이 적용될 개체에 대한 참조를 전달합니다. 그래서 당신의 경우에는 손이 전략에 대한 참고서로 전달됩니다. 생성자는 "public MyStrategy (Hand context)"와 비슷한 형태로 보일 것입니다. http://en.wikipedia.org/wiki/Strategy_pattern와 일치하는 이름입니다. –

+0

이것은 게임에서 핸드 핸드를 제거해야한다는 것을 의미합니다. 나는 그걸로 괜찮지 만, 그것은 "깨끗한"것인가? 게임에는 손이 있으므로 게임의 특성이 손에 있어야합니다. – Antoine

관련 문제