Брокерская цепочка, цепочка ответственности с интерфейсом AutoCloseable - PullRequest
0 голосов
/ 10 июля 2020

Я практикую брокерскую цепочку, и я получил код, некоторые его части я не могу понять. Скажем, есть Creatures и его CreatureModifier, чтобы изменить атаку и защиту существ.

Автор реализовал AutoCloseable на DoubleAttackModifier, но не сделал этого на IncreaseDefenseModifier . Это меня смущает, почему он этого не сделал? Любая помощь или предположение приветствуются.

class CreatureModifier
{
protected Game game;
protected Creature creature;

public CreatureModifier(Game game, Creature creature)
{
    this.game = game;
    this.creature = creature;
}
}

class IncreaseDefenseModifier extends CreatureModifier
{
public IncreaseDefenseModifier(Game game, Creature creature)
{
    super(game, creature);
    // if name and arguments are correct, increase its value
    game.queris.subscribe(q -> {
        if (q.creatureName.equals(creature.name)
            && q.argument == Query.Argument.DEFENSE)
        {
            q.result += 3;
        }
    });
}   
}
// here the author use the interface but didn't use it in IncreaseDefenseModifier
class DoubleAttackModifier extends CreatureModifier implements AutoCloseable
{
private final int token;

public DoubleAttackModifier(Game game, Creature creature)
{
    super(game, creature);

    // after subscribe, this token is auto-closed
    token = game.queris.subscribe(q -> {
        if (q.creatureName.equals(creature.name)
        && q.argument == Query.Argument.ATTACK)
        {
            q.result *= 2;
        }
    });
}

@Override
public void close() throws Exception
{
    game.queris.unsubcribe(token);
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...