Head Firstデザインパターン 第2版 頭とからだで覚えるデザインパターンの基本
オライリー・ジャパン
著者:Eric Freeman、Elisabeth Robson
監訳:佐藤直生
訳者:木下哲也
はじめに
1章 デザインパターンへようこそ:デザインパターン入門
それは簡単なSimUDuckアプリから始まった
しかし、カモが「飛ぶ」ようにする必要が出てきてしまった
しかし、事態はひどく悪い方向に進む
継承について考えるジョー
インタフェースはどうか?
あなたがジョーの立場ならどうする?
ソフトウェア開発における1つの変わらぬもの
問題に照準を合わせる
不変な部分から変化する部分を分離する
カモの振る舞いを設計する
カモの振る舞いを実装する
カモの振る舞いを統合する
Duckコードをテストする
振る舞いを動的に設定する
カプセル化された振る舞いの全体像
「HAS-A」は「IS-A」より優れている場合がある
デザインパターンのことを話そう
地元のレストランでふと耳にしたこと
オフィスの隣の席でふと耳にしたこと
共有パターンボキャブラリの威力
どうやってデザインパターンを使うの?
デザインツールボックスのためのツール
2章 オブジェクトを事情通に:Observerパターン
気象観測アプリケーションの概要
Observerパターンとの出会い
パブリッシャ+サブスクライバ=Observerパターン
Observerパターンの定義
疎結合の威力
気象観測所を設計する
気象観測所を実装する
気象観測所の機能を強化する
世の中のObserverパターンを調べる
人生を変えるアプリケーションのコーディング
その頃、Weather-O-Rama社では
新しいコードの試運転
デザインツールボックスのためのツール
設計原則に挑戦
3章 オブジェクトの装飾:Decoratorパターン
スターバズコーヒーへようこそ
開放/閉鎖原則(Open-Closed Principle)
Decoratorパターンとの出会い
デコレータを使って飲み物注文システムを構築する
Decoratorパターンの定義
飲み物を装飾する
スターバズのコードを書く
飲み物をコーディングする
コンディメントをコーディングする
コーヒーを提供する
実世界のデコレータ:Java I/O
java.ioクラスの装飾
独自のJava I/Oデコレータを書く
新しいJava I/Oデコレータのテスト
デザインツールボックスのためのツール
4章 OOの利点を活用した構築:Factoryパターン
変化する部分を特定する
オブジェクト作成をカプセル化する
簡単なピザファクトリを構築する
Simple Factoryの定義
ピザ店用のフレームワーク
サブクラスに決定させる
ファクトリメソッドを宣言する
ついにFactory Methodパターンに対面するときが来た
作成者と製品を並列にとらえる
Factory Methodパターンの定義
オブジェクトの依存関係を考察する
依存関係反転の原則
原則を適用する
一連の食材
食材ファクトリを構築する
ピザの改良
ピザ店を再び訪れる
これまでに実行したこと
Abstract Factoryパターンの定義
Factory MethodとAbstract Factoryの比較
デザインツールボックスのためのツール
5章 唯一のオブジェクト:Singletonパターン
典型的なSingletonパターンの実装を分析する
チョコレート工場
Singletonパターンの定義
ヒューストンハーシー、問題が発生しました
マルチスレッドを扱う
マルチスレッドを改善できるか?
チョコレート工場に戻ると…
デザインツールボックスのためのツール
6章 呼び出しのカプセル化:Commandパターン
Home Automation or Bust社
ベンダーのクラスを調べる
Commandパターンを簡単に紹介
食堂からCommandパターンへ
最初のコマンドオブジェクト
コマンドオブジェクトを使用する
コマンドをスロットに割り当てる
リモコンを実装する
コマンドを実装する
リモコンをテストする
マニュアルを書く
何を行うの?
アンドゥボタンのテストを行う!
状態を使ってアンドゥを実装する
シーリングファンのコマンドにアンドゥを追加する
リモコンにはパーティモードが必要!
マクロコマンドを使う
Commandパターンのその他の使用法:リクエストのキュー
Commandパターンのその他の使用法:リクエストのログ記録
現実世界でのコマンドパターン
デザインツールボックスのためのツール
エクササイズの答え
7章 適合可能にする:AdapterパターンとFacadeパターン
身の回りのアダプタ
オブジェクト指向アダプタ
カモのように歩き、カモのようにガーガー鳴くものがいたら、それはカモに違いないカモアダプタでラップされた七面鳥かもしれない
アダプタのテスト
Adapterパターンの説明
Adapterパターンの定義
オブジェクトアダプタとクラスアダプタ
実世界のアダプタ
Enumeration をIteratorに適合させる
スイートホームシアター
映画を観る(難しい方法)
照明、カメラ、ファサード!
ホームシアターファサードを構築する
単純化されたインタフェースを実装する
映画を観る(簡単な方法)
Facadeパターンの定義
最小知識の原則(Principle of Least Knowledge)
友達を作らずオブジェクトに影響を与えない方法
Facadeパターンと最小知識の原則
デザインツールボックスのためのツール
8章 アルゴリズムのカプセル化:Template Methodパターン
そろそろカフェインが欲しい
(Javaで)コーヒークラスと紅茶クラスを作る
CoffeeとTeaを抽象化しよう
さらに設計を進める
prepareRecipe()を抽象化する
何を行ったの?
Template Methodとの出会い
テンプレートメソッドで何が得られた?
Template Methodパターンの定義
テンプレートメソッドをフックする
フックを使う
ハリウッドの原則とテンプレートメソッド
実際のテンプレートメソッド
テンプレートメソッドを使ってソートする
ソートすべきカモがいる
compareTo()とは?
Duckを比較する
Duckをソートしてみよう
カモソートマシンの作成
フレームでスイング
AbstractListを使った独自のリスト
デザインツールボックスのためのツール
9章 適切に管理されたコレクション:IteratorパターンとCompositeパターン
速報:オブジェクト町食堂とオブジェクト町パンケーキハウスの合併
メニューの項目を調べる
仕様の実装:最初の試み
反復処理をカプセル化できる?
Iteratorパターンとの出会い
DinerMenuにイテレータを追加する
イテレータを使ってDinerMenuを書き直す
ウェイトレスのコードを修正する
コードをテストする
現在の設計を見直す
java.util.Iteratorを使って整理する
Iteratorパターンの定義
Iteratorパターンの構造
単一責務の原則
JavaのIterableインタフェースとの出会い
Javaの拡張forループ
カフェのメニューを調べる
イテレータとコレクション
ウェイトレスの準備は整った?
Compositeパターンの定義
Compositeを使ってメニューを設計する
MenuComponentを実装する
MenuItemを実装する
コンポジットメニューを実装する
いよいよ試運転
デザインツールボックスのためのツール
10章 物事の状態:Stateパターン
Javaによる成功
状態マシンの基礎
コードを書く
社内でのテスト
やっぱり来た、変更要求!
面倒な「状態」
新しい設計
StateインタフェースとStateクラスを定義する
ガムボールマシンを書き直す
完全なGumballMachineクラスを確認しよう
その他の状態を実装する
Stateパターンの定義
まだ10回に1回「当たり」があるガムボールのゲームを完成させる必要がある
ゲームを仕上げる
Mighty Gumball社のCEOへのデモ
健全性チェック
危うく忘れるところだった!
デザインツールボックスのためのツール
11章 オブジェクトアクセスの制御:Proxyパターン
モニターのコーディング
モニターのテスト
リモートメソッドの基礎
ガムボールマシンをリモートサービスにする準備をする
RMIレジストリに登録する
Proxyパターンの定義
仮想プロキシに備える
アルバムジャケット仮想プロキシの設計
画像プロキシの作成
Java APIのProxyを使って保護プロキシを作成する
オブジェクト町のギークの出会い支援サービス
Person実装
5分間ドラマ:サブジェクト(主体)の保護
全体像:Person用の動的プロキシの作成
プロキシ動物園
デザインツールボックスのためのツール
アルバムジャケットビューアのコード
12章 パターンのパターン:Compoundパターン
連携する
カモとの再会
何をしたの?
(鳥)「カモ」瞰図:クラス図
Compoundパターンの王様
MVC(モデル/ ビュー/ コントローラ)との出会い
詳しく調べる
MVCをパターンの集まりとして理解する
MVCを使ってビートを制御する
構成要素を構築する
次に具象BeatModelクラスを調べよう
ビュー
ビューを実装する
次はコントローラ
すべてをまとめる
Strategyパターンを探究する
モデルを適合させる
次はテストの実行
デザインツールボックスのためのツール
13章 実世界でのパターン:パターンの有効利用
デザインパターンの定義
デザインパターンの定義についてさらに詳しく調べる
フォースと共にあらんことを
デザインパターンの作者になるには
デザインパターンを体系化する
パターンで考える
パターンに対する心
共有ボキャブラリの威力を忘れない
「ギャング・オブ・フォー」とオブジェクト町を巡る
旅はまだ始まったばかり
パターン動物園
アンチパターンの弊害を撲滅する
デザインツールボックスのためのツール
オブジェクト町を去る
14章 付録:残りのパターン
Bridgeパターン
Builderパターン
Chain of Responsibilityパターン
Flyweightパターン
Interpreterパターン
Mediatorパターン
Mementoパターン
Prototypeパターン
Visitorパターン
索引