그래서 게임 엔진을 만들고 있는데 특정 인터페이스를 구현하는 클래스에서 메서드를 호출 할 수 있어야합니다 (인터페이스에 의해 구현 된 메서드 만 호출하고 싶습니다).
내 문제는 클래스 이름이 그것을 구현할 것인지 모른다는 것입니다.
예를 들어 Java는 클래스 이름을 모르고 Runnable을 구현하는 모든 클래스에서 어떻게 run () 메서드를 호출합니까?
실제로, Factory 패턴이나 Spring과 같은 종속성 주입 컨테이너 에 대해 질문하고 있습니다.
물론 인터페이스에서 메서드를 호출 할 수 있습니다. 문제는 인스턴스를 얻는 방법 입니다. 물론 어딘가에서 지정, 코딩 또는 구성해야합니다. 나중에 둘 이상이있을 수있는 경우 구성이 선호됩니다.
따라서 실제 예가 더 많습니다.
public interface MovementStrategy {
public Move selectMove (Actor actor, ActorSituation theirSituation);
}
public class MonsterTypes {
public static MonsterType GOBLIN = new MonsterType( "goblin", new AttackMover(1.2));
public static MonsterType TROLL = new MonsterType( "troll", new AttackMover(0.45));
public static MonsterType DEER = new MonsterType( "deer", new FleeMover(2.0));
// useful to have, also.
public static List<MonsterType> getAllRegisteredTypes();
public static class MonsterType {
protected String name;
protected MovementStrategy moveStrategy;
// TODO -- getters & setters for all properties.
// constructor.
public MonsterType (String name, MovementStrategy moveStrategy) {
this.name = name;
this.moveStrategy = moveStrategy;
}
}
}
public class AttackMover implements MovementStrategy {
// SPEC: generally move towards/attack PC, with varying speeds.
}
public class FleeMover implements MovementStrategy {
// SPEC: generally run away from PCs.
}
이것은 아마도 완벽한 디자인은 아닐 것입니다. "움직임"(일명 목표 추구)과 배우의 턴 / 액션을 전반적으로 결합합니다.하지만 더 많은 아이디어를 얻을 수 있기를 바랍니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다