- 恥ずかしいデザインパターン勉強会 #1 - connpass をやりました
- 会場を貸して頂いた伊藤忠テクノソリューションズ様ありがとうございました!
第1回なので
Javaもデザインパターンもほぼ何もしらない状態で今更ですが「Javaでデザインパターンを継続的かつ網羅的に学習する」きっかけとして「恥ずかしい勉強会」を改めて開催しました。最初なのでSingletonパターンをやりました。一番簡単で直感的だから。ライブコーディングもしました。そのログです↓
ギスギスしない感じがすごくいい #hazukac
— ぐちお (@kinunori) 2014, 7月 23
Singletonパターン
- インスタンスが一つしか無い感じに書くのならglobalなstatic変数でいいんだけど
- インスタンスが一つしか無いことを保証する書き方をしたい
- 組み込みなんかであるのは「単一デバイスへのアクセス」「constructで電源オン、以降電源オンを保証」とか
ポイント
ツッコミとか
package my; public class Hoge { private static Hoge instance = null; public static synchronized Hoge getInstance() { if (instance == null) { instance = new Hoge(); } return instance; } } // 複数スレッドからgetInstanceが呼ばれる機会が多い場合 // synchronizedキーワードによる複数スレッドの同調が // 処理そのものを遅くする可能性がある
classロード時にやる場合
package my; public class Hoge { private static Hoge instance = new Hoge(); public static Hoge getInstance() { return instance; } } // シングルトンで管理したいクラスが巨大でありなおかつ // getInstanceが呼ばれるかどうかすら分からないほど稀な場合 // staticで確保するinstanceがもったいない場合がある
その他Java初修者としての学び
package
宣言は一行目。import
とかより先に書かなければならない。package
定義を編集した場合、それをimport
するクラスをコンパイルする前にpackage
をコンパイルする必要がある。- 宣言と代入は一行で行える。例
Hoge hoge = new Hoge();
private
やpublic
キーワードを付けずに宣言したプロパティやメソッドはdefault
という公開範囲になる。default
は同パッケージ内でアクセス可能という公開範囲
Date
クラスはjava.util
パッケージにあるよ。Thread
クラスはデフォルトで参照できるよ。Thread.sleep
は必ずtry-catch
で包む必要があるよ。
雑感
- とりあえずめっちゃ疲れたんでこんくらいでいいや
- 次からはちゃんと 増補改訂版Java言語で学ぶデザインパターン入門 の第一章から進めてく
- 初修者なのでマサカリコメント大歓迎です。はじめること、これ大事