増補改訂版
Java言語で学ぶ
デザインパターン入門

結城浩

本書は、デザインパターンの定番入門書です。

デザインパターン原典に登場する23個のパターンすべてについて、 わかりやすいJavaのサンプルプログラムを使って解説しています。

多くの読者から愛読されている本書で、 あなたもデザインパターンに親しみましょう。

Amazon

目次


想定読者

本書は、こんな方へおすすめです。

  • デザインパターンに関心はあるけれど、なかなか勉強の機会がつかめない方。
  • GoFのデザインパターンの本を読んだけれど「何だか、難しそう」と感じた方。
  • Javaの勉強をしているけれど、抽象クラスやインタフェースの理解がいま1つ、という方。
  • オブジェクト指向はプログラムの「再利用」を目指すというのは知っているけれど、体験的に「つかんで」いない方。

Java言語そのものについて初歩から学びたい方は、 以下のJava言語入門書もぜひご覧ください。

プログラムの「体質」を改善していくリファクタリングを学びたい方は、 以下の書籍をどうぞ。


本書の目次

『増補改訂版Java言語で学ぶデザインパターン入門』
結城浩 著
SBクリエイティブ刊
ISBN-10: 4-7973-2703-0
ISBN-13: 978-4797327038
価格3800円(税抜)

  • はじめに
  • UMLについて
  • デザインパターンを学ぶ前に
  • デザインパターンに慣れる
    • 第1章 Iterator ― 1つ1つ数え上げる
    • 第2章 Adapter ― 一皮かぶせて再利用
  • サブクラスにまかせる
    • 第3章 Template Method ― 具体的な処理をサブクラスにまかせる
    • 第4章 FactoryMethod ― インスタンス作成をサブクラスにまかせる
  • インスタンスを作る
    • 第5章 Singleton ― たった1つのインスタンス
    • 第6章 Prototype ― コピーしてインスタンスを作る
    • 第7章 Builder ― 複雑なインスタンスを組み立てる
    • 第8章 Abstract Factory ― 関連する部品を組み合わせて製品を作る
  • 分けて考える
    • 第9章 Bridge ― 機能の階層と実装の階層を分ける
    • 第10章 Strategy ― アルゴリズムをごっそり切り替える
  • 同一視
    • 第11章 Composite ― 容器と中身の同一視
    • 第12章 Decorator−飾り枠と中身の同一視
  • 構造を渡り歩く
    • 第13章 Visitor ― 構造を渡り歩きながら仕事をする
    • 第14章 Chain of Responsibility ― 責任のたらい回し
  • シンプルにする
    • 第15章 Facade ― シンプルな窓口
    • 第16章 Mediator ― 相手は相談役1人だけ
  • 状態を管理する
    • 第17章 Observer ― 状態の変化を通知する
    • 第18章 Memento ― 状態を保存する
    • 第19章 State ― 状態をクラスとして表現する
  • 無駄をなくす
    • 第20章 Flyweight ― 同じものを共有して無駄をなくす
    • 第21章 Proxy ― 必要になってから作る
  • クラスで表現する
    • 第22章 Command ― 命令をクラスにする
    • 第23章 Interpreter ― 文法規則をクラスで表現する
  • 付録A 練習問題の解答
  • 付録B サンプルプログラムの実行手順
  • 付録C GoFによるデザインパターンの分類
  • 付録D デザインパターンQ&A
  • 付録E 参考文献

サンプルプログラムのダウンロード

どなたでも、 本書のサンプルプログラムを以下からダウンロードできます。

取り扱い方法は、アーカイブファイルを展開後、 readme.txtファイルをお読み下さい。


誤りと訂正

誤りと訂正

======================================================================
(2013-08-16)
p.178: 1行目
  誤:クラス図を示します。
  正:オブジェクト図を示します。

======================================================================
(2013-08-16)
p.178: Fig.12-4のキャプション
  誤:b3,b2,b1のクラス図
  正:b3,b2,b1のオブジェクト図

======================================================================
(2013-08-16)
p.375: List 23-9: 14行目
  誤: 
        }
    } catch (Exception e) {
  正:
        }
        reader.close();
    } catch (Exception e) {

======================================================================
(2011-06-28)
p151 : List 10-10 : 6行目
    誤:
        SortAndPrint sap = new SortAndPrint(data, new InsertSorter());
    正:
        SortAndPrint sap = new SortAndPrint(data, new SelectionSorter());

======================================================================
(2009-10-10)
p.448 : List A22-3 : 下から2行目に追加
    誤:
            radius = 6;
        }
    正:
            radius = 6;
            history.append(new ColorCommand(this, color));
        }

======================================================================
(2009-03-19)
p.250 : List 16-7 : 2行目
    誤:
        static public void main(String args[]) {
    正:
        public static void main(String args[]) {

======================================================================
(2006-10-05)
p.395 : 問題7-2の解答 : 7行目
    誤:
        getResult → buildResult
    正:
        close → buildDone

======================================================================
(2006-10-05)
p.396 : List A7-2およびList A7-3
    誤:
        public void buildTitle(String title) {
        ...
        public void buildString(String str) {
        ...
        public void buildItems(String[] items) {
        ...
        public void buildDone() {
    正:
        protected void buildTitle(String title) {
        ...
        protected void buildString(String str) {
        ...
        protected void buildItems(String[] items) {
        ...
        protected void buildDone() {

======================================================================
(2006-08-04)
p.44 : 問題 3-3 : (第7刷で修正)
    誤:
        スーパークラスからのみ呼び出せるように
    正:
        継承関係および同一パッケージにあるクラスからのみ呼び出せるように
======================================================================
(2006-08-04)
p.149 : 問題10-4 : (第7刷で修正)
    誤:
        挿入ソート(insertion sort)
    正:
        選択ソート(selection sort)
======================================================================
(2006-08-04)
p.150 : List 10-8 : (無駄な交換を削除) : (第7刷で修正)

    public class SelectionSorter implements Sorter {
        public void sort(Comparable[] data) {
            for (int i = 0; i < data.length - 1; i++) {
                int min = i;
                for (int j = i + 1; j < data.length; j++) {
                    if (data[min].compareTo(data[j]) > 0) {
                        min = j;
                    }
                }
                Comparable passingplace = data[min];
                data[min] = data[i];
                data[i] = passingplace;
            }
        }
    }
======================================================================
(2006-08-04)
p.432 : List A18-1 : (第6刷で修正)
    誤:
        this.fruits = new Vector();
    正:
        this.fruits = new ArrayList();
======================================================================
(2006-08-04)
p.108 : 下から2行目 : (第6刷で修正)
    誤:
        java.util.Vectorクラスから
    正:
        java.util.ArrayListクラスから
======================================================================
(2006-08-04)
p.158 : 上から6行目 : (第6刷で修正)
    誤:
        Vectorとして定義されています。
    正:
        ArrayListとして定義されています。
======================================================================
(2006-08-04)
p.159 : 上から3行目 : (第6刷で修正)
    誤:
        操作をVectorに委譲
    正:
        操作をArrayListに委譲
======================================================================
(2005-01-10)
p.387 : List A4-2 : (第3刷での誤り)
    誤:
        public Hashtable getDatabase() {
    正:
        public HashMap getDatabase() {

======================================================================
(2004-10-28)
p.245 : 下から3行目〜最終行 : (第2刷での誤り)
    誤:
        引数で渡しているthisは、……と判断するのです。
    正:
        (ソースコードの改訂に合わせて文章を削除)

======================================================================
(2004-08-30)
p.382 : 問題1-1の解答 : (第2刷での誤り)
    誤:
        this.book = new Vector(initialsize);
    正:
        this.book = new ArrayList(initialsize);

結城浩のJava関連書籍


関連リンク


フィードバック

フィードバックを送るフォーム

あなたのご意見やご感想をお送りください。

あなたの一言が大きなはげみとなりますので、どんなことでもどうぞ。

結城浩へのフィードバック

男性 (Male)   女性 (Female)

※上の情報は、いずれも未記入でかまいません。

All of the information above are optional.