Processingで学ぶ 実践的プログラミング専門課程

第23回 デザインパターン(1) Facade

この記事を読むのに必要な時間:およそ 4 分

テストコードをクラスPersonalDataTestにまとめる

ついでですから,テストに関するコードも切り出してPersonalDataTest.pdeというクラスファイルにまとめましょう。すると,びっくりするぐらいにメインとなるファイルのコード量が減ります。クラスPersonalDataTestが,メインとなるスケッチファイルから見て,各種テストコードに対するFacadeになります。

//コードの概略を示すために,メソッド内部のコードは略します。
class PersonalDataTest{
  void testPersonalData(){ }
}

[作業]UI.pdePersonalDataTest.pdeを書きましょう。

以下にFacadeパターンを適用したコード例を示します。PersonalDataTestクラスを実行するためにDEBUG_MODE変数がtrueになっています。ユーザインタフェイスの動作を確認する場合はDEBUG_MODEfalseにしてから実行してください。

健康管理アプリにFacadeパターンを適用したコード例
メソッドをFacadeで隠蔽する

主となるスケッチファイルHealthApp_Facade.pdeから多くのコードを消せましたが,よく見ると,次のコード引用のようにユーザインタフェイスの各要素を配置するメソッドが残っています。

ユーザインタフェイスの各要素を配置するメソッド群

    ui.drawManShape();
    ui.drawWeightSign();
    ui.drawWeightUpButton();
    ui.drawWeightDownButton();
    ui.drawWeight();
    ui.drawHeightSign();
    ui.drawHeightUpButton();
    ui.drawHeightDownButton();
    ui.drawHeight();
    ui.drawBMI();
    ui.drawCategory();

メインになるスケッチファイル内で,これほど事細かに要素の配置メソッドが見えている必要はありません。⁠各要素を配置せよ!」と一言呪文があれば済むはずです。そこで,これらのメソッドをarrangeElementsというメソッドにまとめてしまいましょう。

ユーザインタフェイスの描く要素を配置するためのメソッド群をまとめて呼ぶメソッド

    ui.arrangeElements();

こうすることで,Facadeパターンの真価が発揮されます。整理されたHealthApp_Facade.pdeは,もともと244行ありましたがリファクタリング後は35行になりました演習問題解答例のファイルを参照してください⁠⁠。コード量は14%になっていて,どちらのコードが把握しやすいかといえば,圧倒的に後者です。これがデザインパターンを利用したリファクタリングの効果です。

今回の演習はこのarrangeElementsを書くこととします。とても簡単です。問題を考えるための演習ではなく,デザインパターンの効果を感じるための演習になります。

演習

演習1(難易度:very easy)

健康管理アプリのユーザインタフェイスの各要素を配置するメソッドarrangeElementsを書き,HealthApp_Facade.pdeのコードをさらにシンプルにしましょう。

まとめ

  • デザインパターンとは何かを学びました。
  • Facadeの使い方を学びました。

学習の確認

それぞれの項目で,Aを選択できなければ,本文や演習にもう一度取り組みましょう。

  1. デザインパターンの目的とメリットが理解できましたか?
    1. 理解できた。気持ちよく納得した。
    2. 理解できた。しかし,今ひとつスッキリしない。
    3. 理解できない。
  2. Facadeを使えるようになりましたか?
    1. 使えるようになった。自分のプログラミングにも活用できそうだ。
    2. 本文の例を理解することはできたが,自分のプログラミングに活用できる気がしない。
    3. 本文の例が理解できない。

参考文献

  • 『増補改訂版Java言語で学ぶデザインパターン入門』⁠結城浩 著,ソフトバンククリエイティブ)
    • 誰もが認める最も分かりやすいデザインパターン入門書。本来は原典(GoF本)を勧めるべきところですが,本書は別格。
  • 『オブジェクト指向における再利用のためのデザインパターン』⁠Eric Gamma 著,ソフトバンククリエイティブ
    • デザインパターンの原典。別称『GoF本』サンプルコードがC++で書かれているため,ProcessingやJava言語のユーザにはハンディがあります。しかし結城浩氏の入門書を読みこなした後ならば本書にあたる価値があります。
  • 『Java デザインパターン徹底攻略』⁠日立ソフトウェアエンジニアリング⁠株⁠インターネットビジネス部 著,技術評論社
    • 流石の日立。前掲のGoF本の解説書で,サンプルはJava言語。絶版であることが惜しまれます。強く再版を望みます。
  • 『Robocodeで学ぶ 一歩先のJavaプログラミング』⁠平田敦 著,カットシステム
    • Robocodeを使ったJava言語の学習書です。デザインパターンの活用にも言及します。

演習解答

  1. 大きな変更ではありません。UI.pdearrengeElementsメソッドを作り,その中にHealthApp.pde_Facade.pdeにあったユーザインタフェイス関係のメソッドを移動すれば終了です。ui.drawManShape()と呼んでいたところは,drawManShape()としましょう。ui.がついていても,Processingは問題なく実行してくれますが,格好がよくありません。

著者プロフィール

平田敦(ひらたあつし)

地方都市の公立工業高等学校教諭。趣味はプログラミングと日本の端っこ踏破旅行。やがては結城浩氏のような仕事をしたいと妄想している。

Twitter : @hirata_atsushi