- - PR -
よく利用するデザインパターンは?
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2003-08-27 10:49
自分なりの見解を補足。 デザインパターンの一番の大きなメリットは、抽象層(インターフェース)と具象層(実装)の分離を計り、その結果インターフェースの再利用を(うまくいけば実装の再利用も)促進させるものと考えています。 デザインパターンにとらわれず、インターフェースと実装を分離させることに注力して設計すると、必然とよいものになっていくでしょう。 また、デザインパターンを勉強する上で、インターフェースと実装の分離という観点から行うと、ものにしやすいです。 | ||||
|
投稿日時: 2003-08-27 11:02
OCPやDbC(Design by Contract)に関する解説書というか原典はやはり、バートランド・メイヤーの著書、Object-Oriented Software Construction (2nd Edition)でしょう。 # 日本語訳も出ていたような気がしたが、気のせい? | ||||
|
投稿日時: 2003-08-27 11:11
GoF本(オブジェクト指向における再利用のためのデザインパターン)は読まれましたか? 僕はこの本で「オブジェクト指向で設計する上での設計指針・哲学」を学びました。 (説明が書かれているわけではないんですけどね) もちろんデザインパターンの勉強にもなるので一石二鳥です。 | ||||
|
投稿日時: 2003-08-27 11:22
Singletonを使用することで得られる最大の効果は、インスタンス数を任意の数に制限できるということでしょう。また、Lazy Initializationを行うことが出来るようになります。 ただし、multi thread版Singletonである、Double Checked Lockはアンチパターンなので使用してはいけません(理由は結城浩氏のマルチスレッド版デザパタ本に書かれています)。 最近、私は、SingletonよりもむしろInitialize-on-demand Holder classイディオムを使用することが多くなりました。 Initialize-on-demand HolderはEffective Javaに書かれています。 まだ未読でしたら、一読することをお勧めします。 | ||||
|
投稿日時: 2003-08-27 12:17
こんにちは。
Singletonについて、もう一度自分なりによく考えてみました。 「インスタンスの数を制限する」というのを、今までの自分の書いてきたコードを考えて みると、「目的のクラス」自身でインスタンス数の制限をするのではなく、「クラスを生成・ 利用する側のクラス」でインスタンスの制限をしていました。 「目的のクラスを生成・利用する側のクラス」に最大数や「目的のクラス」を保持する インスタンス変数の配列などを持たせて new していました。当然動きますし、間違い ではありません。 でも、今の作りだと再利用という観点からなんとなく問題があると感じてきました。 インスタンス数を制限したいというには、それなりの理由があるはずです。 理由があるにもかかわらず、今のつくりはインスタンス生成のロジックをクラスの利用側 にゆだねています。これではバグの元だし、その都度、数を制限するロジックを利用側が 書いてやる必要があり、再利用性は低いですね。 と考えれば、やはりSingletonの考え方で、「目的のクラス」自身がインスタンス数の制限 をする必要がありますね。 そう考えると、Singletonの説明をみてもピンとこなかったものが、なるほどと思えるよう になりました。また、デザインパターンといっても、アルゴリズムのように悩むほどのもの でもなく、オブジェクト指向の部分に関して今まで自分が直感的・体験的にやってきたこ とが、体系的に簡潔に整理されているような感じかな?という気になってきました。 今まで自分の書いたソースと見比べて違いとメリット・デメリットを考えて、デザイン パターンの考え方を取り入れれば、もっと簡潔に、また再利用性のあるプログラムがかけ そうな気がしてきました。 | ||||
|
投稿日時: 2003-08-27 12:54
Singletonパターンで、コンストラクタをprivateで宣言するというところで、
まずは衝撃を受けてました。目から鱗という感じで、常々悩んでいた問題が その部分を見てから一気に展開しました。 | ||||
|
投稿日時: 2003-08-27 13:07
こんにちは。
>Singletonパターンで、コンストラクタをprivateで宣言するというところで、 >まずは衝撃を受けてました。 そうですね。コンストラクタをprivateにするという発想はなかなか出てきませんよね。 | ||||
|
投稿日時: 2003-08-27 14:13
コンストラクタをprivateにするというつながりでいくと、Factory Methodもこの部類に入ります(必ずしも、privateにする必要はないけど)。
Java APIにおいて、staticなメソッドでvalueOf()と名づけられていれば、まず間違いなくFactory Methodです。実際にソースを眺めることで勉強になるでしょう。 | ||||
