- PR -

よく利用するデザインパターンは?

投稿者投稿内容
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-08-27 10:49
引用:

デザインパターンが何のために存在するのかというと、部品の『再利用性を高める』ために生まれたものと認識しています。そういった観点から勉強するようにぼくはしています。


自分なりの見解を補足。
デザインパターンの一番の大きなメリットは、抽象層(インターフェース)と具象層(実装)の分離を計り、その結果インターフェースの再利用を(うまくいけば実装の再利用も)促進させるものと考えています。

デザインパターンにとらわれず、インターフェースと実装を分離させることに注力して設計すると、必然とよいものになっていくでしょう。

また、デザインパターンを勉強する上で、インターフェースと実装の分離という観点から行うと、ものにしやすいです。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-08-27 11:02
引用:

ちなみに、「オブジェクト指向で設計する上での設計指針・哲学」みたいなものを説明して
いる書籍や記事は、どなたかご存知ありませんでしょうか?


OCPやDbC(Design by Contract)に関する解説書というか原典はやはり、バートランド・メイヤーの著書、Object-Oriented Software Construction (2nd Edition)でしょう。
# 日本語訳も出ていたような気がしたが、気のせい?
ぽん
大ベテラン
会議室デビュー日: 2003/05/13
投稿数: 157
投稿日時: 2003-08-27 11:11
引用:

ちなみに、「オブジェクト指向で設計する上での設計指針・哲学」みたいなものを
説明している書籍や記事は、どなたかご存知ありませんでしょうか?


GoF本(オブジェクト指向における再利用のためのデザインパターン)は読まれましたか?
僕はこの本で「オブジェクト指向で設計する上での設計指針・哲学」を学びました。
(説明が書かれているわけではないんですけどね)

もちろんデザインパターンの勉強にもなるので一石二鳥です。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-08-27 11:22
引用:

Singletonパターンについて読み、書いてある事はなんとなく理解できていると思います。
しかしショックを受けるほどピンときません。



Singletonを使用することで得られる最大の効果は、インスタンス数を任意の数に制限できるということでしょう。また、Lazy Initializationを行うことが出来るようになります。

ただし、multi thread版Singletonである、Double Checked Lockはアンチパターンなので使用してはいけません(理由は結城浩氏のマルチスレッド版デザパタ本に書かれています)。

最近、私は、SingletonよりもむしろInitialize-on-demand Holder classイディオムを使用することが多くなりました。

Initialize-on-demand HolderはEffective Javaに書かれています。
まだ未読でしたら、一読することをお勧めします。
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2003-08-27 12:17
こんにちは。

Singletonについて、もう一度自分なりによく考えてみました。
「インスタンスの数を制限する」というのを、今までの自分の書いてきたコードを考えて
みると、「目的のクラス」自身でインスタンス数の制限をするのではなく、「クラスを生成・
利用する側のクラス」でインスタンスの制限をしていました。

「目的のクラスを生成・利用する側のクラス」に最大数や「目的のクラス」を保持する
インスタンス変数の配列などを持たせて new していました。当然動きますし、間違い
ではありません。
でも、今の作りだと再利用という観点からなんとなく問題があると感じてきました。

インスタンス数を制限したいというには、それなりの理由があるはずです。
理由があるにもかかわらず、今のつくりはインスタンス生成のロジックをクラスの利用側
にゆだねています。これではバグの元だし、その都度、数を制限するロジックを利用側が
書いてやる必要があり、再利用性は低いですね。

と考えれば、やはりSingletonの考え方で、「目的のクラス」自身がインスタンス数の制限
をする必要がありますね。

そう考えると、Singletonの説明をみてもピンとこなかったものが、なるほどと思えるよう
になりました。また、デザインパターンといっても、アルゴリズムのように悩むほどのもの
でもなく、オブジェクト指向の部分に関して今まで自分が直感的・体験的にやってきたこ
とが、体系的に簡潔に整理されているような感じかな?という気になってきました。

今まで自分の書いたソースと見比べて違いとメリット・デメリットを考えて、デザイン
パターンの考え方を取り入れれば、もっと簡潔に、また再利用性のあるプログラムがかけ
そうな気がしてきました。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2003-08-27 12:54
Singletonパターンで、コンストラクタをprivateで宣言するというところで、
まずは衝撃を受けてました。目から鱗という感じで、常々悩んでいた問題が
その部分を見てから一気に展開しました。
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2003-08-27 13:07
こんにちは。

>Singletonパターンで、コンストラクタをprivateで宣言するというところで、
>まずは衝撃を受けてました。
そうですね。コンストラクタをprivateにするという発想はなかなか出てきませんよね。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-08-27 14:13
コンストラクタをprivateにするというつながりでいくと、Factory Methodもこの部類に入ります(必ずしも、privateにする必要はないけど)。

Java APIにおいて、staticなメソッドでvalueOf()と名づけられていれば、まず間違いなくFactory Methodです。実際にソースを眺めることで勉強になるでしょう。

スキルアップ/キャリアアップ(JOB@IT)