本書は、2005年に発刊されて以来、高い人気を誇ってきたロングセラーの改訂版で、初学者、過去に挫折した経験のある方、知識を確固たるものにしたい方を対象に、イラストや写真を使ってやさしく楽しく解説するHead Firstシリーズのデザインパターン編です。オブジェクト指向プログラミングにおいて、先人たちの知恵と経験の結晶である「デザインパターン」を学ぶことで、頻繁に起こる問題とその対応策を体得し、優れた設計に基づいた信頼性の高いコードを効率的に開発することが可能となります。GoFの真髄を理解するため、教育心理学に基づきビジュアルを重視したレイアウト、文体、クイズやパズルを随所に盛り込み、飽きることなく読み進められる工夫を凝らしています。
Head Firstデザインパターン 第2版
―頭とからだで覚えるデザインパターンの基本
Eric Freeman、Elisabeth Robson 著、佐藤 直生 監訳、木下 哲也 訳
- TOPICS
- Head First , Programming , Java
- 発行年月日
- 2022年06月
- PRINT LENGTH
- 672
- ISBN
- 978-4-87311-976-2
- 原書
- Head First Design Patterns, 2nd Edition
- FORMAT
- Print PDF
目次
はじめに 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パターン 索引