先日勉強会でやった、cloneの話。
それを使った、Prototypeパターンの話。
改めて、参考書読んで、デザパタ本を読んで、ってしてみると、なんとなくハラオチ。
ミックスイン、っていうのは、付加情報的な考え方を指すんだという理解。
参考文献には、その役割を果たすインターフェースをマーカインターフェースと紹介しているし。
ただ、Cloneableインターフェースをimplementsしているからといって、なんでObjectクラスの
clone()が呼べるのかが謎。
具体的な実装は何処に。
Effective java には、cloneの使い方に関連して、「深いコピー」の話が書いてあったけど、
java言語で学ぶデザインパターン入門 には、普通に(普通って何だ!?って議論はおいといて)
コピーした場合の「浅いコピー」の説明が書かれてます。
浅いコピーでは、配列とか、オブジェクトとか(参照系)は、新しいインスタンスだからといって、
新しいメモリ領域をとって・・・ってことはしてくれない。
だから、その場合の対処として、super.clone()を呼びつつ、必要なフィールドに対しては、
自分でコピーするようにcloneをオーバーライドすべし。
・・・ってことなのかな。
あんまりcloneって使う機会が今まで無かったけれど、(まぁ理解してなかったんだから使えなかった、
というのが正しいけれど) 「クラス名なしで」インスタンスを生成できる、というのは確かにうれしいことかも。
本は、平行して読め、みたいな話も聞いたことがあるけど、今日はその恩恵をモロに受けた。
いろんな知識≒toolをちゃんと使いこなせるようにならないと。
・・・・脊髄反射で。
それを使った、Prototypeパターンの話。
改めて、参考書読んで、デザパタ本を読んで、ってしてみると、なんとなくハラオチ。
ミックスイン、っていうのは、付加情報的な考え方を指すんだという理解。
参考文献には、その役割を果たすインターフェースをマーカインターフェースと紹介しているし。
ただ、Cloneableインターフェースをimplementsしているからといって、なんでObjectクラスの
clone()が呼べるのかが謎。
具体的な実装は何処に。
Effective java には、cloneの使い方に関連して、「深いコピー」の話が書いてあったけど、
java言語で学ぶデザインパターン入門 には、普通に(普通って何だ!?って議論はおいといて)
コピーした場合の「浅いコピー」の説明が書かれてます。
浅いコピーでは、配列とか、オブジェクトとか(参照系)は、新しいインスタンスだからといって、
新しいメモリ領域をとって・・・ってことはしてくれない。
だから、その場合の対処として、super.clone()を呼びつつ、必要なフィールドに対しては、
自分でコピーするようにcloneをオーバーライドすべし。
・・・ってことなのかな。
あんまりcloneって使う機会が今まで無かったけれど、(まぁ理解してなかったんだから使えなかった、
というのが正しいけれど) 「クラス名なしで」インスタンスを生成できる、というのは確かにうれしいことかも。
本は、平行して読め、みたいな話も聞いたことがあるけど、今日はその恩恵をモロに受けた。
いろんな知識≒toolをちゃんと使いこなせるようにならないと。
・・・・脊髄反射で。