arcanum_jp’s blog

おっさんの日記

デザインパターン勉強会に行ってきた

 ブログ書くまでが勉強会です。キリ!

 デザインパターン読書会です。もくもくとコードを書いても良いですし、プロジェクターで、実演もしますので、一緒にコードを書いてみてもよいと思います。
 一緒にコードを書いていただければ、ぼんやりしか判らない人でも、「 組 め た ! 動 い た ! 」が実感・体感できます。また、初参加の方でも、とても入りやすい読書会です。毎回、学ぶパターンが違うので、前回からの引き継ぎ・流れがありません。

http://tohoku-dev.jp/modules/news/article.php?storyid=197


 元デザインパターン教信者としては行ってみたかった勉強会です。行ってみました。場所は楽天さんの仙台オフィス。仙台駅近くのX橋(エックス橋と読みます。昔、橋の形が上からみてXに見えたのでそう呼ばれていたらしい。今は’く橋’ですかね。。。ww)の横にあります。


大きな地図で見る

Builderパターン

 今回のお題はBuilderパターン。結城さんのデザインパターンの本を教科書に写経→説明というスタイルです。写経の時間が1時間あるのでJavaに慣れていない人でもゆっくり打ち込むことできますよ。

 Builderパターンは「何を作るか」「どうやって作るか」を分離してあげるパターン。Builder自身は「何を作るか」についての抽象的なインターフェース(JavaのInterfaceという意味ではなく、モノとモノとのインターフェースという意味)のみを提供する。そのインターフェースを呼び出すDirectorがBuilderクラスのメソッドを呼び出してあげて、オブジェクトを生成する。またBuilder自身は抽象的なインターフェースのみを提供するので、実際の処理に関しては具象クラスが受け持つ。


 今回の講義では、Builderのサブクラスとして複数あり、多様性を知りつつ、Builderの良さを知ることができるようになっていた。あと身近なものとしてのBuilderパターンにはJavaAPIでStringBuilderがこのBuilderパターンとのこと。また、XXXXBuilderと最後にBuilderがついているクラスはたいていBuilderパターンになっているとのこと。


 guavaというライブラリの中のImmutableList.Builderには泣いた!結構これいいね。サブクラスにゲッター経由でList公開するけど変更してほしくないときなんかある。そんなときこのImmutableList.Builderでリストの内容を不変にすることができればすんごくいいね。


 実際の業務ではintの引数が5〜10個も使うようなクラスを作る時がある。(まぁクラス設計が変っていうのはおいて置いて)そんなときもBuilderパターンが役に立つそうな。その説明として、まず、テレスコーピングコンストラクタという方法を説明。これは引数の内、必須の引数のみのコンストラクタを定義し、そのほかに、必須以外の引数が一つづつ追加されたコンストラクタを定義するもの。ただし、これはメンテナンス性が悪いなどのデメリットがある。その後、JavaBeanパターンを説明。これは引数渡しではなくセッターを定義してあげるというもの。これもセッターを作るので不変クラスにできないなどのデメリットがある。


 それらの代替策として、インスタンスを作成するためだけのBuilderクラスを作ってあげるというもの。ビルダーに必須の引数を渡し、その後オプショナルなものについてはセッターを提供する。セットした最後に生成するためのメソッドを定義する。と言うもの。

デザインパターンについて

 デザインパターンJava覚えたよ!っていう人が次に覚えるべきものだと思っている。それは、デザインパターンには過去歴戦のプログラマやクラス設計者達が苦労して作り上げたエッセンスがパターン名として定義してあり、そのクラス設計の形を名前を一緒に覚えることによって、最速のクラス設計学習をすることができるから。また、名前で抽象化できるということが大事で、設計の話をする場合に長々と説明するより「ここはxxパターンに似せて・・・」と一言で済むようになる。まさに共通言語である。

 Immutableのかわいさと言ったら・・・とか、Singletonのボッチ感といったらww!Conpositeたんとか描いてみたいwwとか言い始めるとキリがない。酒の肴には最適だな!となるまで極めるのだ!ジーGoFジーGoF!


増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

これを教科書に使いました。