インターフェースとそれに関連するクラス

檜山正幸
Thu Sep 28 2006

目次

1. 一般的なインターフェース

  1. Startable : なんらかの仕事を行う。start()は、終了後に同期的に戻っても、 すぐさま非同期に戻ってもよい。
  2. CannotStartException : なんらかの理由で動作開始ができなかった。作 業中の問題点は、(必要があれば)ExitReportHandlerで知らせる。
  3. ExitReportHandler : 仕事の終了状況を伝える。
/* Startable.java */
package sample;

public interface Startable {
  void start() throws CannotStartException;
}
/* CannotStartException.java */
package sample;

public class CannotStartException extends Exception {
  public CannotStartException(String msg) {
    super(msg);
  }
}
/* ExitReportHandler.java */
package sample;

public interface ExitReportHandler {
  public void aborted(int exitCode, String msg, Throwable cause);
  public void finished(int exitCode);
}
package sample;

public interface Result<T> {
 /** なんらかの作業結果を返す */
 public T result();

 /** result()を呼んで意味のある値を得られるかどうか */
 public boolean isAvailable();
}

2. ポート・インターフェース

明白にポート型を意識したインターフェース達。

  1. VSTToken : トークン・データ
  2. VSTLexerPI : レクサーの制御インターフェース
  3. VSTParserPI : パーザーの制御インターフェース
  4. VSTParseException : パーズ時の例外
  5. VSTHandler : パーザーからコールバックされるハンドラのインターフェース
  6. Evaluator : プレイスホルダーを評価する機能のインターフェース
  7. VSTProcessorPI : プレイスホルダー置換処理を行うプロセッサーの制御インターフェース
/* VSTToken.java */
package sample;

/* トークン・データ */
public class VSTToken {
  public enum Kind {L_BRACE, R_BRACE, TEXT, EOF}
  
  public final Kind kind;
  public final String value;
  public VSTToken(Kind kind, String value) {
    this.kind = kind;
    this.value = value;
  }
}
/* VSTLexerPI.java */
package sample;

import java.io.IOException;

/* レクサーのインターフェース */
public interface VSTLexerPI {
  public VSTToken nextToken() throws IOException;
}
/* VSTParserPI.java */
package sample;

import java.io.IOException;

public interface VSTParserPI {
  void parse() throws IOException, VSTParseException;
}
/* VSTParseException.java */
package sample;

/* パージング時の例外 */
class VSTParseException extends Exception {
  public VSTParseException(String msg) {
    super(msg);
  }
}
/* VSTHandler.java */
package sample;

/* ハンドラのインターフェース */
public interface VSTHandler {
  public void startTemplate();
  public void endTemplate();

  public void placeholder(String content);

  public void text(String text);

  public void error(String message);
}
/* Evaluator.java */
package sample;

public interface Evaluator {
  public String eval(String arg);
}
/* VSTProcesssorPI.java */
package sample;

public interface VSTProcessorPI {
  void process();
}