ハンドラ
日本語 | 操作者 |
英語 | handler |
ふりがな | はんどら、はんどらー |
フリガナ | ハンドラ、ハンドラー |
処理を委託され、その処理を行うクラスもしくはメソッド。
「全体の機能」に対して「一部の処理を、ユーザーもしくはプログラマーが任意に変更できるようにする」ために使用されるのがハンドラである。
ハンドラは通常はインターフェイスとして用意され、ハンドラクラスはそのインターフェイスの実装クラスとして作り、メソッドを実装する。
このクラスを「全体の機能」に登録しておくと、「全体の機能」は「一部の処理」を行う際にハンドラクラスのメソッドを呼び出す。
このような仕組みにすることで、「全体の機能」を作り直すことなく「一部の処理」だけを追加したり切り替えることができる。
主なハンドラに「イベントハンドラ」がある。
イベントハンドラは、イベントが発生した際にメソッドが呼び出され、そのイベントに対応した処理を行うことができる。
この例であれば、GUIのシステムが「全体の機能」、イベントに対応する処理が「一部の処理」となる。
イベントハンドラ以外にも、例外を処理する「エラーハンドラ」、ログの出力先を決める「ログ出力ハンドラ」等がある。
ハンドラに似たものにリスナーがある。
ハンドラとリスナーはほぼ同じで、機能としても非常に似ている。
単語としては、ハンドラは古い単語であり、リスナーは新しい単語である。
また、ハンドラはイベント以外の多くの場合に使用されるが、リスナーは主にイベントの処理を行う場面で使用される。
そう考えれば、「リスナーはハンドラの一種である」と言えなくもない。
「全体の機能」に対して「一部の処理を、ユーザーもしくはプログラマーが任意に変更できるようにする」ために使用されるのがハンドラである。
ハンドラは通常はインターフェイスとして用意され、ハンドラクラスはそのインターフェイスの実装クラスとして作り、メソッドを実装する。
このクラスを「全体の機能」に登録しておくと、「全体の機能」は「一部の処理」を行う際にハンドラクラスのメソッドを呼び出す。
このような仕組みにすることで、「全体の機能」を作り直すことなく「一部の処理」だけを追加したり切り替えることができる。
主なハンドラに「イベントハンドラ」がある。
イベントハンドラは、イベントが発生した際にメソッドが呼び出され、そのイベントに対応した処理を行うことができる。
この例であれば、GUIのシステムが「全体の機能」、イベントに対応する処理が「一部の処理」となる。
イベントハンドラ以外にも、例外を処理する「エラーハンドラ」、ログの出力先を決める「ログ出力ハンドラ」等がある。
ハンドラに似たものにリスナーがある。
ハンドラとリスナーはほぼ同じで、機能としても非常に似ている。
単語としては、ハンドラは古い単語であり、リスナーは新しい単語である。
また、ハンドラはイベント以外の多くの場合に使用されるが、リスナーは主にイベントの処理を行う場面で使用される。
そう考えれば、「リスナーはハンドラの一種である」と言えなくもない。
参考サイト
// Sample.java
import java.io.IOException;
import java.util.logging.Logger;
import java.util.logging.FileHandler;
import java.util.logging.SimpleFormatter;
public class Sample
{
public static void main( String[] args )
{
try
{
// ログ名を指定してログクラスを作ります。
// 通常は、1クラスにつき1ロガーなので、クラス名を付けます。
Logger logger = Logger.getLogger( "Sample" );
// ログの出力先を決める「ハンドラ」を作ります。
// ログを「どこに出力するか」を頼まれ、そのログを
// 「取り回して」出力するのが、このハンドラの役目です。
// ログファイルに出力するために、FileHandlerクラスを使用します。
// 出力ファイル名はlog.txtです。
FileHandler handler = new FileHandler( "log.txt" );
// 普通に出力するのでSimpleFormatterクラスを使用します。
handler.setFormatter( new SimpleFormatter() );
// 出力先としてhandlerを追加します。
logger.addHandler( handler );
// INFOレベルのログを出力します。
logger.info( "ログ出力します。" );
// 2005/06/23 14:51:06 Sample main
// 情報: ログを出力します。
// Loggerクラスには最初から標準エラー出力への出力が入っているので
// 標準エラー出力にも出力されています。
// 同時に、log.txtが実行時のカレントディレクトリにも作られ、
// その中に同様の出力がされているはずです。
}
catch( IOException e )
{
// FileHandlerクラスのコンストラクタで指定したファイルが
// 作れなかったら、例外が投げられます。
e.printStackTrace();
}
// 一番簡単なログの使い方。
Logger.global.info( "ログを出力します。" );
// 2005/06/23 14:51:06 Sample main
// 情報: ログを出力します。
// このように、Loggerクラスのglobalフィールドを使うと
// 簡単に標準エラー出力にログ出力できます。
}
}
import java.io.IOException;
import java.util.logging.Logger;
import java.util.logging.FileHandler;
import java.util.logging.SimpleFormatter;
public class Sample
{
public static void main( String[] args )
{
try
{
// ログ名を指定してログクラスを作ります。
// 通常は、1クラスにつき1ロガーなので、クラス名を付けます。
Logger logger = Logger.getLogger( "Sample" );
// ログの出力先を決める「ハンドラ」を作ります。
// ログを「どこに出力するか」を頼まれ、そのログを
// 「取り回して」出力するのが、このハンドラの役目です。
// ログファイルに出力するために、FileHandlerクラスを使用します。
// 出力ファイル名はlog.txtです。
FileHandler handler = new FileHandler( "log.txt" );
// 普通に出力するのでSimpleFormatterクラスを使用します。
handler.setFormatter( new SimpleFormatter() );
// 出力先としてhandlerを追加します。
logger.addHandler( handler );
// INFOレベルのログを出力します。
logger.info( "ログ出力します。" );
// 2005/06/23 14:51:06 Sample main
// 情報: ログを出力します。
// Loggerクラスには最初から標準エラー出力への出力が入っているので
// 標準エラー出力にも出力されています。
// 同時に、log.txtが実行時のカレントディレクトリにも作られ、
// その中に同様の出力がされているはずです。
}
catch( IOException e )
{
// FileHandlerクラスのコンストラクタで指定したファイルが
// 作れなかったら、例外が投げられます。
e.printStackTrace();
}
// 一番簡単なログの使い方。
Logger.global.info( "ログを出力します。" );
// 2005/06/23 14:51:06 Sample main
// 情報: ログを出力します。
// このように、Loggerクラスのglobalフィールドを使うと
// 簡単に標準エラー出力にログ出力できます。
}
}
// Sample.java import java.io.IOException; import java.util.logging.Logger; import java.util.logging.FileHandler; import java.util.logging.SimpleFormatter; public class Sample { public static void main( String[] args ) { try { // ログ名を指定してログクラスを作ります。 // 通常は、1クラスにつき1ロガーなので、クラス名を付けます。 Logger logger = Logger.getLogger( "Sample" ); // ログの出力先を決める「ハンドラ」を作ります。 // ログを「どこに出力するか」を頼まれ、そのログを // 「取り回して」出力するのが、このハンドラの役目です。 // ログファイルに出力するために、FileHandlerクラスを使用します。 // 出力ファイル名はlog.txtです。 FileHandler handler = new FileHandler( "log.txt" ); // 普通に出力するのでSimpleFormatterクラスを使用します。 handler.setFormatter( new SimpleFormatter() ); // 出力先としてhandlerを追加します。 logger.addHandler( handler ); // INFOレベルのログを出力します。 logger.info( "ログ出力します。" ); // 2005/06/23 14:51:06 Sample main // 情報: ログを出力します。 // Loggerクラスには最初から標準エラー出力への出力が入っているので // 標準エラー出力にも出力されています。 // 同時に、log.txtが実行時のカレントディレクトリにも作られ、 // その中に同様の出力がされているはずです。 } catch( IOException e ) { // FileHandlerクラスのコンストラクタで指定したファイルが // 作れなかったら、例外が投げられます。 e.printStackTrace(); } // 一番簡単なログの使い方。 Logger.global.info( "ログを出力します。" ); // 2005/06/23 14:51:06 Sample main // 情報: ログを出力します。 // このように、Loggerクラスのglobalフィールドを使うと // 簡単に標準エラー出力にログ出力できます。 } }