根据数据值观察数据并选择上下文策略

时间:2013-09-18 11:23:04

标签: java oop design-patterns observer-pattern strategy-pattern

以下是Mudlet的基本Java版本,MUD client使用Apache TelnetClient(不是ssh)。

在很大程度上,作为练习,到目前为止,Context只有一个策略TargetStrategy,它会在{{Deque<GameActions>上返回GameData 依赖 1}}对象值。

这个想法是添加更多策略,更重要的是选择基于游戏数据的策略。例如,在data ...

中传递String目标

然后我有点失落。我非常肯定的一件事是没有Context的{​​{1}}是荒谬的。例如,如果没有该生物的名字,就无法选择一个生物进行定位!

当前流程,设置策略,然后设置数据,是向后。这是否需要GameData类型类,它将游戏数据作为参数并返回StrategySelector

Context代码:

Context

当观察到新数据时,那么......什么?控制器代码如下:

package game;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.logging.Logger;
import model.GameAction;
import model.GameData;

public class Context {

    private static Logger log = Logger.getLogger(Context.class.getName());
    private Strategy strategy;
    private GameData gameData = null;

    private Context() {
    }

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public Deque<GameAction> executeStrategy() {
        log.info(strategy.toString());
        return this.strategy.execute(gameData);
    }

    public void setGameData(GameData gameData) {
        this.gameData = gameData;
    }
}

1 个答案:

答案 0 :(得分:0)

我对此并不满意:

package game;

import model.GameData;

public class RulesForStrategy {

    private Context context = null;
    private GameData gameData = null;

    private RulesForStrategy() {
    }

    public RulesForStrategy(GameData gameData) {
        this.gameData = gameData;
    }

    public Context getContext() {
        context = new Context(new TargetStrategy());
        context.setGameData(gameData);
        return context;
    }
}

因为它没有解决根本问题,所以不存在没有数据的上下文!

但是,我想它会起作用......?