いろんなものはつながっている

デザインパターン ひとことでいうと

2013.12.11

1件

デザインパターンを勉強しようと思い続けてはや何年たったか。例のごとく頭もあまりよくないし、例のごとく勉強したといってもサンプルにならって事例のクラスをちょっと書いてみただけだから、やっぱり、すぐに忘れてしまう。あたりまえか。

そもそも今、自分がさらでどれだけのパターンを書き出せたかというとたった6個だった(Composite, Factory Method, Abstract Factory, Builder, Strategy, Iterator)。自分が意識して使ったことがあるパターンはなんとなくは覚えていたようだ。

GoF本を開いてみると半分くらいまでは読んだ形跡がある。GoFを読み続けていってもよいがネット上にGoFを噛み砕いて説明しているサイトがいっぱいあるので、それを何種類か読んでみることにした。

これまで読んだサイトの中ではここがよいかなと思っていたが今回あらためて探してみて、ここここが自分にとってはとてもわかりやすかった。

デザインパターンを理解するうえで、これまでは、後々これこれのような変更や拡張をする際に、こんなすっきり&簡単に修正できますよー、という点を意識していた。今回、再度いろいろなサイトを見直してみて、どうやって使ってもらうのー、という視点が新たに加わった。この視点がいままで欠けていた。

クラスを使う人に対して、「どんなAPIを提供してやるか」という視点をもつことで、パターンの意図がなんだかすっきり見えるようになったことが多かった。こんなパターン構造にしても結局ユーザからはこのAPIしか見えないんだな、なんだかんだでこのAPIだけしかユーザには関係なんだな、と意識するとあ~あ、こういうメリットがあるね、ということがすんなり理解できた。まあ、これがまさにユーザから隠蔽をする=のちのち他に影響を及ぼさずに変更できる、ということなんだろうが。。。あいかわらず理解が遅い。

とりあえず、GoFやサイトを参考に、自分なりに各パターンを一言で表現してみることで自分にとって印象深いものにすることにした。

Factroy Method
「モノを作りたかったら工場に依頼しな」
これは、生成する処理と使用する処理をわけているともいえる。

Abstract Factory
「ワンセットの製品群、国によって製品個々のスタイル違うんだよね」
ぼうし、めがね、くつのワンセット、その日の天気にあわせてスタイルをかえたいんだよね。

Builder
「ユーザは工場を選らんで作ってくれる人に工場をわたせばいい。」これは、ユーザからモノの作り方を隠すことにもなる。

Prototype
「クローンを作る」
うん、まあ、そうなんだがどんなときに使うんだ?
クラスからインスタンスの生成が難しい場合に適用できる、、確かにそうなんだが、具体的な例があまり思いつかない★

Singleton
「ひとつだけしか作れないようにしておく」
いくつくもインスタンスを作成したくない場合はたくさんあるでしょう。例えばFactoryを生成するときなんか。

Composite
「ツリー構造だ」

Adapter
「ある既存クラスのAPIをユーザが求めるAPIに変えちゃう」
これは、既存のコード(クラス)に一皮かぶせて新しいAPIとして提供してしまうことだ。ラッパークラスの一種だな。

Decorator
「既存クラスの機能をアップだ」
ラッパーだな。でもAdapterパターンとは異なり既存のAPIは変更せずに機能をアップするんだ。たーだー、継承なんかで機能アップオブジェクトに責任を動的に追加するとある。静的に追加するのは継承。

Bridge
「APIの種類の拡張(機能の拡張)とAPIの動作の拡張(実装)は別々にしなよ」
ユーザからみたらAPIの種類の拡張(機能拡張)が行われたようにしか見えない。うらで実装がすりかわっていてもわかんない。

Facade
「ごちゃごちゃしたものにふたをしてシンプルなAPIを提供するってことだ」
具体例は、、ようわからん。

Proxy
「クッション役をいれるってことだ」
キャッシュをもったり、接続先のふりわけをしたりさ。

Flyweight
「Factory + キャッシュ だな」

Chain of Responsibility
「処理のたらいまわし」
if文の連続を条件ごとにクラスをしてしまえ。

Template Method
「手順があらかじめ決まっているなら先に手順をかいちゃえよ」

Strategy
「いれかえ可能クラスだな。」

Status
「状態ごとにクラスをつくっておく。ユーザは違いに気づかなくてもいい。」

Observer
「変更があったら報告します。」
名前はObserverだけど別に変更を観察しているわけではないんだよな。自己申告なんだよな。

Mediator
「みんな、とりあえず私のところに報告して。あとはまかせてね。」

Visitor
「訪問するからわたしを受け入れてね。」
訪問するから受け入れてね。仕事は私がやるからさ。

Memento
「スナップショット」
これもUndo、Redoで使うのか?★

Command
「Redo、Undoをできるようにするために」
Redo、Undo、どうやるんだ?★

Iterator
「どんな構造かわからんけど順々にアクセスさせて」
ユーザからみたらアクセスさせて~とお願いしているよね、これ。

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

スポンサード リンク

カテゴリー

スポンサード リンク