デザインパターンについて実際に実装をしてみないとありがたみや使い方がわからないと思ったので、
23個の変なアプリをQtを使ってC++で書いてみました。(まだ半分しか到達できていないです。。)
結構大変・・・正直覚えてないものもたくさん
生成に関するパターン
- Prototypeパターン: インスタンスを原型から簡単に量産できる
- ステッカー1枚を作成して、それを10枚プロトタイプパターンを作って複製するアプリ
- Singletonパターン: インスタンスを1つしか作らないことを保証する
- インスタンスが常に唯一になっていることが可視化できるアプリ
- Factory Methodパターン: インスタンスの生成をサブクラスで行う
- スープを作るTemplate Methodアプリに皿の機能を追加したアプリ
- Abstract Factoryパターン: インスタンス生成を専門に行うクラスを用意することで、整合性の必要なオブジェクトを間違いなく生成する
- いろんな種類のサラダをぽんぽこぽんぽこ生成するアプリ
- Builderパターン: ある作業工程からさまざまなバリエーションの成果物を生成する
- 生命を生成する作業工程から、猫と宇宙人を生成するアプリ
構造に関するパターン
- Adapterパターン: お互いに関連のないクラス同士のふるまいを合わせる
- 人間クラスと宇宙人クラスをそれぞれ呼び出し、日本語で話しかけたら宇宙人も片言の日本語で返事をしてくれるようなアプリ
- Decoratorパターン: 飾り付けをして、機能を追加していくような構造
- いろんな種類のラーメンに、いろんな種類のトッピングを乗せることができるアプリ
- Compositeパターン: 木構造を伴う再帰的なデータ構造を表すことが可能
- マトリョーシカに入る猫を追加していき、それを最後削除するアプリ
- Bridgeパターン: 実装部分と機能部分を分割して、その間を橋(Bridge)でつなげる
- 猫と犬の鳴き声と、大阪出身の猫と犬の鳴き声を表示するアプリ
振る舞いに関するパターン
- Template Methodパターン: 一般的に使うテンプレートのように、テンプレートを持つスーパークラスがいて、そのテンプレを利用するサブクラスがいる
- 猫とクマがそれぞれオリジナルのスープを、テンプレに倣って調理するアプリ
- Iteratorパターン: 要素の集まり(集合体)を保有するオブジェクトの各要素に順番にアクセスする
- std::vector, std::list, 二次元配列で作成された集合体をiterateするアプリ
- Strategyパターン: アルゴリズムを別ファイルにする
- 牛丼チェーン2種類の牛丼を比較するアプリ
コメント