kyosho5’s blog

貧乏で数学があまり得意ではない理系出身のエンジニアのブログ

デザインパターン勉強メモ③

※投稿し忘れていた分も続けて投稿します。とりあえず1日2章ペースは維持。

第5章 Singletonパターン

指定したクラスのインスタンスが絶対に1つしか存在しないことを保証する
また、そのことをプログラム上で表現する
staticなフィールドを用意し、Singletonクラスのロード時に1度だけ初期化している。
コンストラクタをprivateにすることで、クラス外からのnew Singleton()を禁止している
→以上より、Singletonクラスのインスタンスは1つしか存在しないことになる。

・Singleton役
→唯一のインスタンスを得るためのstaticメソッドを持っている。いつも同じインスタンスを返す。

プログラムの実行開始後、最初にgetInstance(インスタンスを取得する)メソッドが実行された際に
Singletonクラスが初期化される。→staticフィールドの初期化が行われ、唯一のインスタンスが生成される。

第6章 Prototypeパターン

new Something()というクラス名を指定したインスタンス作成ではなく、インスタンスを複製して新しいインスタンスを作る。
以下のような場合に用いる。

・扱うオブジェクトの種類が多すぎて1つ1つをクラスに分けて書くとソースが増えすぎてしまう場合
インスタンス生成に必要な過程が多い場合など、クラスからのインスタンス生成が難しい場合
(1度作ったインスタンスをいったん保管しておき、必要な時にそれをコピーする)
インスタンスを生成するときのフレームワークを特定のクラスに依存させたくないとき
(クラス名を指定してインスタンスを生成するのではなく、ひな型となるインスタンスを保管しておき、必要な時にコピーする)

・Prototypeの役
インスタンスをコピーして新しいインスタンスを作るメソッドを定める。

・ConcretePrototypeの役
インスタンスをコピーして新しいインスタンスを作るメソッドを実際に実装する。

・Clientの役
インスタンスをコピーするメソッドを利用して、新しいインスタンスを作る。

インスタンスをコピーするメソッドとして、Java言語にはcloneメソッドがある。
使用する場合にはjava.lang.Cloneableインタフェースを実装する必要がある。
cloneメソッドはjava.lang.Objectクラスで定義されている