2012-03-08 4 views
-1

내가 원하는 것을 위해 적절한 패턴을 찾는 데 어려움이 있습니다.사용자 멤버에 액세스하는 전략 패턴

두 개의 게임 모드가있는 블록 게임이 있습니다. 한 모드에서 제거 된 블록은 화면 상단에서 새 블록으로 대체됩니다. 다른 모드에서는 제거 된 블록이 맨 아래에서 상승하고 전체 필드를 위로 밀어 올리는 완전히 새로운 블록 행으로 대체됩니다. 그래서 이것을 구현하기 위해 전략 패턴을 사용하는 것이 가장 좋을 것이라고 생각했습니다.

이제이 전략은 경기장에서 기존 블록의 모든 위치에 대한 액세스를 수정해야하지만 문제는 정보가 전략의 사용자 클래스 (Game 클래스)에 있으며 분명히 순환 할 수 없습니다 의존성.

전체 필드를 참조로 전달할 수 있지만 모든 블록 생성 코드가 Game 클래스 내에 있습니다 (내 생각에 그렇듯이). 그래서 마음에 오는 유일한 방법은 이러한 모든 메서드를 함수 참조로 전달하는 것입니다.하지만 과도한 것처럼 보이는 것은 저에게 말입니다.

이 문제를 해결하는 방법은 무엇입니까? 어쩌면 내가 전략 패턴을 사용하고 싶어서 잘못된 길을 걷고있는 것일 수 있습니다. 도움말 크게 감사드립니다.

사용자 클래스의 멤버에 따라 동일한 메서드에 액세스해야하는 클래스에서 두 Strategy Pattern 개체를 사용하는 것과 관련하여 힌트를 얻는 보너스 포인트입니다.

그 도움

나는 종류의 아웃 - 오브 - 박스 답을 가정하는 너무 복잡 결국 추측
+0

디커플링은 항상 시작하기 좋은 지점입니다. 인터페이스/청취자는 어떻습니까? 나는 Bomberman의 리메이크에 약간의 모순적인 문제에 직면하고있다. 가능한 한 추상적으로 프로그램을 시도해보십시오. 많은 시간을 할애 해주었습니다. –

+0

우선 Java에서 "함수 참조"를 전달할 수 없으므로이를 해결하기 위해 일종의 함수 객체를 만들어야합니다. 사용할 수있는 또 다른 패턴은 템플릿입니다. 어쨌든 나는 그것을 사용하기 위해 다른 객체에 대한 참조를 전달하는 데 어려움을 느끼지 않습니다. –

답변

0

의 경우 내가 자바로 코딩하고 있습니다.

나는 Traxdata의 미스터 스미스 (Smith Smith)의 제안과 함께 실제로 다른 개체에 대한 참조를 전달하기위한 제안을 따랐다.

내 마지막 솔루션은 FieldManager, Field 및 Strategy 클래스로 구성됩니다. FieldManager는 필드 및 전략 인스턴스를 포함합니다. Field 클래스에는 블록 작성 코드가 들어 있습니다.

블록을 만들거나 제거해야 할 때마다 적절한 함수가 해당 전략 함수를 호출하고 참조를 필드로 전달합니다. 따라서 전략이 현장에서 어떤 것을 만들거나 제거해야 할 때마다 현장 객체를 통해 그렇게 할 수 있습니다.