Java.use(better);
《目的》
Command パターンを適用した事例を通して、その理解を深めます。また、分業プログラミングを支援するハリウッドの原則〔= Hollywood Principle〕について紹介します。
《動機》
Swing コンポーネントを利用するときに面倒なのは、登録すべきリスナーと、イベントを処理するメソッドとの組み合わせです。しかし、利用者(プログラマー)にとって興味があるのは、コンポーネントを利用して、何を実行をしたいのかということです。それ以外の情報は、提供者(プログラマー)だけが知っていればいいことです。何かうまい仕掛はないものでしょうか。
□ 重複しないコードの断片に特化したい
メニュー項目 Quit を選択すると、アプリケーションが終了します。これを実現するコードの断片では、
JMenuItem quitMenu = new JMenuItem("Quit");
new ButtonClicked() {
public void execute() { System.exit(0); }
}.listenTo(quitMenu);
抽象クラス ButtonClicked を具現化した、無名クラスのインスタンスを用意して、指定したコンポーネント quitMenu で発生するイベントに傾聴 listenTo します。この手法は、実現すべきメソッドが簡潔で、コードの断片が「重複しない」ときに便利です。
ButtonClicked の利用者は、リスナーやイベントの詳細を知りません。メニュー項目を選択したときに実行 execute したい処理を記述するだけです。(後述するように)ButtonClicked の提供者は、リスナーを登録 addActionListener して、〔when〕イベント ActionEvent が発生したときに〔how〕メソッド actionPerformed を介して処理を依頼します。
「ハリウッドの原則」に従うなら、利用者(プログラマー)は、いつどのように〔when/how〕して情報をアクセスするかを制御できません。それを決定するのは、提供者(プログラマー)です。この原則に従って、前述したコードの断片の意図を読み解くと、次のようになります。
JMenuItem メニュー項目 = new JMenuItem("Quit"); new ボタンをクリックしたときに() { public void 実行したいことは() { ここに書いてあります; } }.に傾聴します(メニュー項目);
↑ TOP
》作業中です《♪ 花見車(はなみぐるま)