非常に今更な話題ですが、前のTGIFで少し触れられたデザインパターンについて意外と知らない人が多かったようなので、今回はそちらについて少し書こうかと思います。
「デザイン」と聞くとグラフィックデザインやWebデザインのことを思い浮かべがちですが、IT業界におけるデザインパターンの「デザイン」は元々の言葉の意味である「設計」
とりわけソフトウェアの設計のことを指しています(ちなみに「アーキテクチャ」等の言葉もそうですが「デザインパターン」という言葉自体は建築関係の用語のようです) 。
つまりデザインパターンというのはソフトウェア設計のパターンのことです。
色々な人が提唱しているので、有名なものからあまり知られていないものまで沢山あります。
一般化したせいなのか最近はあまり聞かなくなってきた気がするMVC(Model View Controller)パターンなんかもデザインパターンの1種です。
そんな数あるデザインパターンの中でも特に有名なものの一つが、GoFのデザインパターンと呼ばれる23個のデザインパターンです。
GoFというのはGang of Four(直訳すると4人のギャング) の略で、20年ほど前に出版された『オブジェクト指向における再利用のためのデザインパターン』という本の4名の著者が自分たちのことです。
うろ覚えですが確かこの本が初めて大々的に「デザインパターン」という言葉を使い始めたもの(だったはず)で、このGoFのデザインパターン抜きにデザインパターンは語れない、と言って過言ではないでしょう。
GoFのデザインパターンは「生成に関するパターン」「構造に関するパターン」「振る舞いに関するパターン」の3つにカテゴライズされていますが、特にこれらは排他的なものではなく、用途に応じて組み合わせることも可能です。以下にそれぞれのパターン名を記載します。
A. 生成に関するパターン
– Abstract factory
– Builder
– Factory method
– Prototype
– Singleton
B. 構造に関するパターン
– Adapter
– Bridge
– Composite
– Decorator
– Facade
– Flyweight
– Proxy
C. 振る舞いに関するパターン
– Chain of responsibility
– Command
– Interpreter
– Iterator
– Mediator
– Memento
– Observer
– State
– Strategy
– Template method
– Visitor
英単語だけだと何のことやらわからないでしょうが、1つ1つ説明する時間も知識も無いので詳細は割愛します。
ググればいくらでも情報は出てきますので気になる方は調べてみてください。
自分が比較的よく使っているのはFactory method、Singleton、Observer、Template methodあたりでしょうか。
特にObserverパターンあたりはJavaのイベントリスナが当てはまったりしますし、名前を知らないだけで他の方も使ったことがあるのではないかと思います。
あとAndroidのアプリ開発ではXXXBuilderやXXXAdapterなどのクラスを利用しますが、使い方や挙動を見るとそれらもGoFのデザインパターンに合わせて名前が付けられているようです。
GoFのデザインパターンは基本的には書籍のタイトルにある通り「オブジェクト指向」の言語に対する設計のパターンですが
最近のメジャーなプログラミング言語は大体オブジェクト指向プログラミングをサポートしているのであまり関係ないでしょう(弊社でもほとんどの案件でオブジェクト指向プログラミング言語を使っていると思います)。
またこのデザインパターンは選定基準として「2つ以上の実際のソフトウェアで使われている」というものがあり、決して理論先行で作られたものではなく、実例の共通項を抽出してカタログ化したものです。
InterpreterやIteratorなど一部のパターンはプログラミング言語自体の機能として既に実装されている場合もあるので、全てのパターンが実用的なものであるとは限りませんが
このように名前をつけることで、「これは複数同じものを生成させたくないからSingletonパターンを使おう」といったような具合に設計の指標として使ったり、設計時の議論の叩き台として使うことができます。
知っていて損をすることは無いはずなので、学んだことが無い方は一度調べてみてはいかがでしょうか。
K.U.