Head Firstデザインパターン 第2版

―頭とからだで覚えるデザインパターンの基本

[cover photo]
TOPICS
Head First , Programming , Java
発行年月日
PRINT LENGTH
672
ISBN
978-4-87311-976-2
原書
Head First Design Patterns, 2nd Edition
FORMAT
Print PDF
Ebook
5,280円
Ebookを購入する
Print
5,280円

本書は、2005年に発刊されて以来、高い人気を誇ってきたロングセラーの改訂版で、初学者、過去に挫折した経験のある方、知識を確固たるものにしたい方を対象に、イラストや写真を使ってやさしく楽しく解説するHead Firstシリーズのデザインパターン編です。オブジェクト指向プログラミングにおいて、先人たちの知恵と経験の結晶である「デザインパターン」を学ぶことで、頻繁に起こる問題とその対応策を体得し、優れた設計に基づいた信頼性の高いコードを効率的に開発することが可能となります。GoFの真髄を理解するため、教育心理学に基づきビジュアルを重視したレイアウト、文体、クイズやパズルを随所に盛り込み、飽きることなく読み進められる工夫を凝らしています。

目次

はじめに

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パターン

索引