SBクリエイティブ

Java言語で学ぶデザインパターン入門

結城浩:著者

◆デザインパターン入門書の決定版!◆
現在、オブジェクト指向設計/プログラミングを行う上で、「デザインパターン」の知識は必要不可欠です。本書『Java言語で学ぶデザインパターン入門』は、プログラミング言語の書籍で定評のある結城浩が、Javaプログラマ全般、特にオブジェクト指向の初心者を対象に、全23のデザインパターンをわかりやすく説き明かした入門書です。

本書では、各パターンにつき1章を割いて、Java言語によるサンプルプログラムを示し、デザインパターンの考え方を丁寧に解説しています。付属CD-ROMには、本文で紹介するサンプルプログラムを全て収録。

◆R.U.Certainマガジン「結城浩にインタビュー」はこちら

【関連書籍】 Java言語で学ぶデザインパターン入門 マルチスレッド編

【目次】

第1部 デザインパターンに慣れる
第1章 Iterator-1つ1つ数え上げる
サンプルプログラム
Aggregateインタフェース/Iteratorインタフェース/Bookクラス/BookShelfクラス/BookShelflteratorクラス/Mainクラス
Iteratorパターンの登場人物
あなたの考えを広げるためのヒント
実装がどうであれ、Iteratorを考える/抽象クラスやインタフェースはどうも苦手で…/AggregateとIteratorの対応/「次」は間違いやすい/「最後」も間違いやすい/複数のIterator/イテレータの種類いろいろ/deletelteratorは不要/
関連しているパターン
この章で学んだこと
第2章 Adapter-一皮かぶせて再利用
Adapterパターン
サンプルプログラム(1)(継承を使ったもの)
Bannerクラス/Printインターフェース/PrintBannerクラス/Mainクラス
サンプルプログラム(2)(委譲を使ったもの)
Printクラス/PrintBannerクラス
Adapterパターンの登場人物
あなたの考えを広げるためのヒント
どんなとき使うのだろう/たとえソースがなくても/バージョンアップと互換性/かけ離れたクラス
関連しているパターン
第2部 サブクラスにまかせる
第3章 Template Method-具体的な処理をサブクラスにまかせる-
Template Methodパターン
テンプレートとは何か/Template Methodパターンとは何か
サンプルプログラム
AbstractDisplayクラス/CharDisplayクラス/StringDisplayクラス/Mainクラス
Template Methodパターンの登場人物
あなたの考えを広げるためのヒント
ロジックが共通化できる/スーパークラスとサブクラスの連携プレー/サブクラスをスーパークラスと同一視する
関連しているパターン
補講:クラス階層と抽象クラス
スーパークラスからサブクラスへの要請/抽象クラスの定義/スーパークラスとサブクラスの強調
第4章 Factory Method-インスタンス作成をサブクラスにまかせる
Factory Methodパターン
サンプルプログラム
Productクラス/Factoryクラス/IDCardクラス/IDCardFactoryクラス/Mainクラス
Factory Methodパターンの登場人物
あなたの考えを広げるためのヒント
フレームワークと肉付け/インスタンス生成-メソッドの実装方法/パターン利用と開発者間の意志疎通
関連しているパターン
第3部 インスタンスを作る
第5章 Singleton-たった1つのインスタンス
Singletonパターン
サンプルプログラム
Singletonクラス/Mainクラス/
Singletonパターンの登場人物
あなたの考えを広げるためのヒント
なぜ制限を設ける必要があるのか/唯一のインスタンスはいつ生成されているか
関連しているパターン
第6章 Prototype-コピーしてインスタンスを作る
Prototypeパターン
サンプルプログラム
Productインタフェース/Managerクラス/MessageBoxクラス/UnderlinePenクラス/Mainクラス
Prototypeパターンの登場人物
あなたの考えを広げるためのヒント
クラスからインスタンスを作ってはいけないのか/クラス名は束縛なのか
関連しているパターン
補講:cloneメソッドとjava.lang.Cloneableインタフェース
Java言語のclone/cloneメソッドはどこで定義されているか/Cloneableが要求するメソッドは?/cloneメソッドは浅いコピーを行う
第7章 Builder-複雑なインスタンスを組み立てる
Builderパターン
サンプルプログラム
Builderクラス/Directorクラス/TextBuilderクラス/HTMLBilderクラス/Mainクラス
Builderパターンの登場人物
関連しているパターン
あなたの考えを広げるためのヒント
誰が何をやっているか/設計時に決められること、決められないこと/ソースの読み方、修正の仕方
第8章 Abstract Factory-関連する部品を組み合わせて製品を作る
Abstract Factoryパターン
サンプルプログラム
抽象的な部品:Itemクラス・Linkクラス・Trayクラス・Pageクラス、抽象的な工場:Factoryクラス
工場を使って部品を組み合わせ、製品を作る:Mainクラス
具体的な工場:ListFactoryクラス、具体的な部品:ListLinkクラス・ListTrayクラス、具体的な製品:ListPageクラス
サンプルプログラム別に具体的な工場を追加
具体的な工場:TableFactoryクラス、具体的な部品:TableLinkクラス・TableTrayクラス、具体的な製品:TablePageクラス
Abstract Factoryパターンの登場人物
あなたの考えを広げるためのヒント
具体的な工場を新たに追加するのは簡単/部品を新たに追加するのは困難
関連しているパターン
第4部 分けて考える
第9章 Bridge-機能の階層と実装の階層を分ける
Bridgeパターン
クラス階層の2つの役割
サンプルプログラム
機能のクラス階層:Displayクラス・CountDisplayクラス、実装のクラス階層:Displaylmplクラス・StringDisplaylmplクラス、Mainクラス
Bridgeパターンの登場人物
あなたの考えを広げるためのヒント
分けておけば、拡張するのが楽になる/継承は固い結びつき、委譲はゆるやかな結びつき
関連しているパターン
第10章 Strategy
Strategyパターン
サンプルプログラム
Handクラス/Strategyインタフェース/WinningStrategyクラス/ProbStrategyクラス/Playerクラス/Mainクラス
Strategyパターンの登場人物
あなたの考えを広げるためのヒント
わざわざStrategy役を作る必要ってあるの?/実行中に切り替えることも可能
関連しているパターン
第5部 同一視
第11章 Composite-容器と中身の同一視
Compositeパターン
サンプルプログラム
Entryクラス/Fileクラス/Directoryクラス/FileTreatmentExceptionクラス/Mainクラス
Compositeパターンの登場人物
あなたの考えを広げるためのヒント
複数と単数の同一視/addはどこに置くべきか/再帰的構造はあらゆる場面で登場する
関連しているパターン
第12章 Decorator-飾り枠と中身の同一視
Decoratorパターン
サンプルプログラム
Displayクラス/StringDisplayクラス/Borderクラス/SideBorderクラス/FullBorderクラス/Mainクラス
Decoratorパターンの登場人物
あなたの考えを広げるためのヒント
透過的なインタフェース(API)/中身を変えずに、機能追加ができる/動的な機能追加ができる/単純な品揃えでも、多様な機能追加ができる/java.ioパッケージとDecoratorパターン/小さいクラスが増えてしまう
関連しているパターン
補講:継承と委譲における同一視
継承-サブクラスとスーパークラスとを同一視
委譲-自分と委譲先とを同一視
第6部 構造を渡り歩く
第13章 Visitor-構造を渡り歩きながら仕事をする
Visitorパターン
サンプルプログラム
Visitorクラス/Acceptorインタフェース/Entryクラス/Fileクラス/Directoryクラス/ListVisitorクラス/FileTreatmentExceptionクラス/Mainクラス/Visitor側とAcceptor側の相互呼び出し
Visitorパターンの登場人物
あなたの考えを広げるためのヒント
ダブルディスパッチ/なぜこんなに複雑なことをするのか/The Open-Closed Principle-拡張については開き、修正については閉じる/ConcreteVisitor役の追加は簡単/ConcreteAcceptor役の追加は困難/Visitorが処理するためには何が必要か
関連しているパターン
第14章 Chain of Responsibility
Chain of Responsibilityパターン
サンプルプログラム
Troubleクラス/Supportクラス/NoSupportクラス/LimitSupportクラス/OddSupportクラス/SpecialSupportクラス/Mainクラス
Chain of Responsibilityパターンの登場人物
あなたの考えを広げるためのヒント
要求を出す人と要求を処理する人をゆるやかに結びつける/動的に連鎖の形態を変える/自分の仕事に集中できる・たらい回しで処理は遅くならないのか
関連しているパターン
第7部 シンプルにする
第15章 Facade-シンプルな窓口
Facadeパターン
サンプルプログラム
Databaseクラス/HtmlWriterクラス/PageMakerクラス/Mainクラス
Facadeパターンの登場人物
あなたの考えを広げるためのヒント
Facade役がやっていることは何だろう/再帰的なFacadeパターンの適用/プログラマがFacadeを作らない理由-心理的要因
関連しているパターン
第16章 Mediator-相手は相談役1人だけ
Mediatorパターン
サンプルプログラム
Mediatorインタフェース/Colleagueインタフェース/ColleagueButtonクラス/ColleagueTextFieldクラス/ColleagueCheckboxクラス/LoginFrameクラス/Mainクラス
あなたの考えを広げるためのヒント
分散が災いになるとき/通信経路の追加/再利用できるのは何か?
関連しているパターン
第8部 状態を管理する
第17章 Observer-状態の変化を通知する
Observerパターン
サンプルプログラム
Observerインタフェース/NumberGeneratorクラス/RandomNumberGeneratorクラス/DigitObserverクラス/GraphObserverクラス/Mainクラス
Observerパターンの登場人物
あなたの考えを広げるためのヒント
ここにも交換可能性が登場する/Observerの順序/Observerの行為がSubjectに影響を与えるとき/更新のためのヒント情報の扱い/「観察」よりも「通知」になっている/Model/View/Controller(MVC)
補講:java.util.Observerインタフェース
関連しているパターン
第18章 Memento-状態を保存する
Mementoパターン
サンプルプログラム
Mementoクラス/Gamerクラス/Mainクラス
Mementoパターンの登場人物
あなたの考えを広げるためのヒント
2つのインタフェース(API)とアクセス制御/Mementoをいくつ持つ?/Mementoの賞味期限は?/Caretaker役とOriginator役を分けることの意味
関連しているパターン
第19章 State-状態をクラスとして表現する
Stateパターン
サンプルプログラム
金庫警備システム/Stateパターンを使わない疑似コーディング/Stateパターンを使った疑似コーディング/Stateインタフェース/DayStateクラス/NightStateクラス/Contextインタフェース/SafeFrameクラス/Mainクラス
Stateパターンの登場人物
あなたの考えを広げるためのヒント
分割して統治せよ/状態に依存した処理/状態遷移は誰が管理すべきか/自己矛盾が起こらない/新しい状態を追加するのは簡単/複数の顔を持つインスタンス
関連しているパターン
第9部 無駄をなくす
第20章 Flyweight-同じものを共有して無駄をなくす
Flyweightパターン
サンプルプログラム
BigCharクラス/BigCharFactoryクラス/BigStringクラス/Mainクラス
Flyweightパターンの登場人物
あなたの考えを広げるためのヒント
複数箇所に影響が及ぶ/intrinsicとextrinsic/管理されているインスタンスは、ガベージコレクションされない
第21章 Proxyパターン
サンプルプログラム
Printerクラス/Printableインタフェース/PrinterProxyクラス/Mainクラス
あなたの考えを広げるためのヒント
代理人を使ってスピードアップ/代理人と本人を分ける必要はあるのか/代理と委譲/透過的ということ/HTTPプロキシー/さまざまなProxy
第10部 クラスで表現する
第22章 Command-命令をクラスにする
Commandパターン
サンプルプログラム
Commandインタフェース/MacroCommandクラス/DrawCommandクラス/Drawableインタフェース/DrawCanvasクラス/Mainクラス
Commandパターンの登場人物
あなたの考えを広げるためのヒント
命令が持つべき情報は?/履歴の保存/アダプター
第23章 Interpreter-文法規則をクラスで表現する
Interpreterパターン
ミニ言語
ミニ言語の命令/ミニ・プログラムの例/ミニ言語の文法/ターミナル・エクスプレッションとノンターミナル・エクスプレッション
サンプルプログラム
Nodeクラス/ProgramNodeクラス/CommandListNodeクラス/CommandNodeクラス/RepeatCommandNodeクラス/PrimitiveCommandNodeクラス/Contextクラス/ParseExceptionクラス/Mainクラス
Interpreterパターンの登場人物
あなたの考えを広げるためのヒント
他にどんなミニ言語があるだろうか/読み飛ばすか読みとるか
この章で学んだこと、そして最後の言葉
付録
A 練習問題の解答
B サンプルプログラムの実行手順
C GoFによるデザインパターンの分類
D 参考文献

【結城浩のプログラミングレッスン】
本シリーズは、結城浩のプログラミング入門書をまとめたものです。プログラミング知識ゼロの読者にも理解できるように、平易な文章で、やさしくかみ砕いて解説しています。練習問題の解答も、詳細な解説がついていますので、独習に最適です。

■本書は学校、企業向けのテキスト教材として最適です。
一括購入のご相談は下記メールアドレスに御問い合わせください。
E-mail:ordersbp@softbank.co.jp

定価:4,180円(本体3,800円+10%税)

書籍情報

  • 発売日:2001年6月25日(月)
  • ISBN:4-7973-1646-2
  • サイズ:
  • ページ数:520
  • 付録:CD-ROM(1)

サポート情報はありません。ご不明な点がございましたら、こちらからお問い合わせください。

著者紹介

著者・結城浩

  • web
1963年生まれ。 プログラミング言語、デザインパターン、暗号、数学などの分野で入門書を執筆。 代表作は『数学ガール』シリーズ。 J.S.バッハの「フーガの技法」が大好きな、プロテスタントのクリスチャン。 2014年度日本数学会出版賞受賞。

関連商品のご案内

もっと見る

試し読み新着お届け

もっと見る