ホーム > 読んだ

真紀俊男
技術者のためのC++ワンポイント

上記連載の中からデザインパターンの扱った部分をまとめている。一般にデザインパターンというと例題として Java の用いられることが多く、個人的には C++ での簡便な例が欲しかったので、この記事はありがたかった。パターンという以上、いつでもその概要を参照できる状態になければ意味はないわけで、GoF 本よりも手軽に参照できる点で特に優れている。(もちろん GoF の日本語改訂版では C++ でのサンプルも独自に収録されており、これはこれでありがたい配慮である。)つまり、パターンを問題に当てはめるのではなく、問題をパターンにあてはめるための使い方ということである。

むろん、他所でもいわれているように、デザインパターンそのものは単なる雛形に過ぎないから、実際の自分の仕事への応用は個別に行わなければならない。最近では、そのような特定ドメイン向けのパターン集も存在しているので、より自分の問題に合わせたパターンの理解と実践が必要だろう。

なお、今更、雑誌を買い集めるわけにもいかない方には『TRY! PC 2002 Autumn』がこの連載記事をまとめた単行本となっているので、こちらがおすすめである。

# なお、なお手抜きのためクラス図が ASCII ART になっている
# 折を見て UML モデリングツールあたりで修正したい
# 一応、----- が抽象クラス、===== が具象クラスである

抄録

Smalltalk では Object が Observer パターンの機能を始めから持っているのでそのまま利用できる。Java では Swing が、その変形パターンを採用している。

デザインパターンに関しては GoF 本以外に POSA 本(F・ブッシュマンほか/金澤典子ほか訳『ソフトウェアアーキテクチャ ソフトウェア開発のためのパターン体系』近代科学社)という定本がある。

また、デザインパターンが主にメカニズムの設計で用いられるのに対して、他に以下のようなパターンがある。『アンチパターン』 も変種といえるだろう。

  • アナリシスパターン
  • オブジェクト指向分析でのパターン。同名の本がある。より概念レベルでのパターンを扱う。
  • アーキテクチャパターン
  • アーキテクチャ設計の中での全体的な構成におけるパターン。レイヤ構成や MVC、MFC での Dock-View など。
  • パイプ & フィルタ
  • 入力データを加工して出力するような場合に、プログラムの側をフィルタとして捉えるパターン。フィルタ同士はインタフェースをパイプとすることで独立性を保つ。しかし、データ構造が一貫しないと組み合わせに依存性を生じる場合がある。

第 13 回 グローバル変数の問題とパターン (2001.10) p.149-155