ポーカー ハンドの履歴のパーサー システムを作成しようとしています。正規表現を使用するものもあれば、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 は単体テストに役立つことがわかりました。しかし、抽象的な継承はより「自然」に感じます...