0

ポーカー ハンドの履歴のパーサー システムを作成しようとしています。正規表現を使用するものもあれば、XML を使用するものもあります...

現在、私はこれを持っています:

abstract class Parser {

    abstract protected GameContext findGameContext();

    public void parse() {
      GameContext gameContext = findGameContext();
    }    
}

と:

class RegexParser {
    protected GameContext findGameContext() {
        // find game context by using some regex...
    }
}

とても満足しています。別の種類のパーサーが必要な場合は、Parser をサブクラス化し、抽象メソッドを実装します。
しかし、依存性注入を使用して同じことができることはわかっています。
このようなもの:

class Parser {

    private IDataType<GameContext> gameContextFinder;

    public setGameContextFinder(IDataTypeFinder<GameContext> finder) { this... = ... }

    public parse() {
        GameContext gameContext = this.GameContextFinder.find();
        ...
    }

どこ:

interface IDataTypeFinder<T> {
    public T find();
}

class GameContextFinder implements IDataTypeFinder {
    public GameContext find() {
        // some regex...
    }
}

と:

class RegexParser extends Parser {

    public RegexParser() {
        this.setGameContextFinder( new GameContextFinder() );
    }                                        
}

両方の方法についてどう思いますか?これまでのところ、DI は単体テストに役立つことがわかりました。しかし、抽象的な継承はより「自然」に感じます...

4

1 に答える 1