Abstract
- 1. Design Pattern
Abstract
● Kazunori Ishikawa (Makai)
2nt October 2011 Design Pattern : Abstract
1
- 2. Backgrounds
「前にもこんな感じのコード書いたなあ.
でも前のコードは,今回は使えないなあ.
なぜなら,前のコードを修正するよりも
一から書いた方が速いし.」
2nt October 2011 Design Pattern : Abstract
2
- 3. Backgrounds
MOTTAINAI !!
2nt October 2011 Design Pattern : Abstract
3
- 4. Backgrounds
達人は
多くの経験から課題をパターン化し,
新たな課題をそのパターンに当てはめて解決する.
だから生産性が高い.
プログラミングも同様.
2nt October 2011 Design Pattern : Abstract
4
- 5. Backgrounds
● Object指向言語のプログラムを機能や役割で見る
と,幾つかのパターンに分けることができる
● 複数の要素が集まっている中から1つ1つ取り出して利
用するパターン
● 現在の状態を保存し,必要に応じてUndoするパターン
...etc
GoFが23のパターンにまとめたよ!
※ GoF (Gang of Four) :
エーリヒ・ガンマ、リチャード・ヘルム、ラルフ・ジョンソン、ジョン・ブリシディースの四人組
2nt October 2011 Design Pattern : Abstract
5
- 6. Backgrounds
● 関連:パターン・ランゲージ
● 人々が「心地よい」と感じる環境(都市、建築物)を
分析して、253のパターンを挙げた。
パターンが集まり、それらの関連の中で環境が
形づくられる。
– 「小さな人だまり」「座れる階段」
「街路を見下ろすバルコニー」など
● 家を建てたり、まちづくりのルールを決める際に
役立つヒント
● これらのパターンは各国の美しい街や住まいに共通する
普遍的なもの
● 急激な近代化の中で忘れられてしまった
2nt October 2011 Design Pattern : Abstract
6
- 7. Aim
● プログラムを再利用可能にすること
● 拡張しやすいプログラムを作ること
2nt October 2011 Design Pattern : Abstract
7
- 8. Abstract
● プログラムを完成品として見ない
● 拡張して使うことを前提として設計
● 23の設計パターン
● モジュールの役割に応じたパターン
2nt October 2011 Design Pattern : Abstract
8
- 9. Design Pattern enables...
● 拡張性の高いプログラムを設計できる
● 一般化された設計
● プログラムの構造の比較を容易にし,
議論を容易にする
● プログラムの役割を明確にする
● モジュール/パッケージ/クラス
2nt October 2011 Design Pattern : Abstract
9
- 11. 23 Patterns
● パターンのパターン (DP数)
– 比較的簡単なDP (2)
– クラス継承関連DP (2)
– インスタンス作成関連DP (4)
– 分けて考えるDP (2)
– 同一視DP (2)
– 構造を渡り歩くDP (2)
– シンプル化DP (2)
– 状態管理DP (3)
– 効率化DP (2)
– 意外なものをクラスで表現DP (2)
2nt October 2011 Design Pattern : Abstract
11
- 12. 比較的簡単なDP
●
Iterator
● 複数の要素の集合から,
1つずつ取り出して利用
●
Adapter
● 異なるインタフェースを持つクラスの間に噛ませ,
橋渡しの役割を担当
2nt October 2011 Design Pattern : Abstract
12
- 13. クラス継承関係DP
●
Template Method
● スーパークラスで処理の骨組みを記述し,
サブクラスで具体的な処理を記述
●
Factory Method
● スーパークラスでインスタンス作成の骨組みを記述し,
サブクラスで具体的な作成法を記述
2nt October 2011 Design Pattern : Abstract
13
- 14. インスタンス作成関連DP
●
Singleton
● インスタンスを1つしか作らない,
インスタンスは1つのみで十分
●
Prototype
● 雛形となるインスタンスを作成し,
それをコピーすることでより具体的なインスタンスを作成
●
Builder
● 複雑なインスタンスを,段階を踏んで作成
●
Abstract Factory
● 部品を組み合わせてインスタンスを作成
2nt October 2011 Design Pattern : Abstract
14
- 15. 分けて考えるDP
●
Bridge
● 機能の階層と実装の階層に分け,
その間を橋渡し
●
Strategy
● アルゴリズムを切り替えて,改良を容易に
2nt October 2011 Design Pattern : Abstract
15
- 16. 同一視DP
異なるものを統一的に利用,
インタフェースを変えずに機能を追加
●
Composite
● 容器と中身を同一視し,再帰的な構造を作成
●
Decorator
● 「飾り」と中身を同一視
→ 飾りを何重にも重ねる
2nt October 2011 Design Pattern : Abstract
16
- 17. 構造を渡り歩くDP
●
Visitor
● 構造を渡り歩きながら,同じ処理を繰り返す
●
Chain of Responsibility
● 構造を渡り歩き,そのどこかで処理(たらい回し)
2nt October 2011 Design Pattern : Abstract
17
- 18. シンプル化DP
●
Facade(ファサード)
● 窓口役のクラスをつくり,
そいつを通してシステム全体の操作
●
Mediator
● 複数クラスが互いにやりとりを行うのではなく,
相談役(仲介役)を設けてそいつとだけやり取り
2nt October 2011 Design Pattern : Abstract
18
- 19. 状態管理DP
●
Observer
● 状態が変化するクラスと,
その変化を受け取るクラスに分割
●
Memento
● 現在の状態を保存し,必要に応じて復帰
●
State
● 状態をクラスで表現
状態に応じたswitch文を減らす
2nt October 2011 Design Pattern : Abstract
19
- 20. 効率化DP
●
Flyweight
● 複数箇所で同じもの(処理)が現れるとき,
それらを共有する
●
Proxy
● 必要なものが必要になるまで作成せず,
それまでは代理のものを利用する
2nt October 2011 Design Pattern : Abstract
20
- 21. 意外なものをクラス化DP
●
Command
● 要求・命令をクラスで表現
●
Interpreter
● 文法規則をクラスで表現
2nt October 2011 Design Pattern : Abstract
21
- 22. Enquete
● 比較的簡単 ● 構造を渡り歩く
● Iterator ● Visitor
● Adapter ● Chain of Responsibility
● クラス継承関連 ● シンプル化
Template Method
●
● Facade
Factory Method
Mediator
●
●
インスタンス作成関連
状態管理
●
●
● Singleton
● Observer
● Prototype
● Memento
● Builder
● State
● Abstract Factory
● 効率化
● 分けて考える
Bridge
● Flyweight
●
● Strategy ● Proxy
● 同一視 ● 意外なものをクラスで表現
● Composite ● Command
● Decorator ● Interpreter
2nt October 2011 Design Pattern : Abstract
22