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

学べるのは、デザインパターンだけじゃない。

結城 浩

本書は、わかりやすいJavaのサンプルプログラムを通して、デザインパターンを学ぶ本です。 非常の多くの読者から愛読され、プログラミング技術書には珍しいほどのロングセラーとなっています。

目次

はじめに

こんにちは、結城浩です。 ここは、 『増補改訂版Java言語で学ぶデザインパターン入門』 (ソフトバンクパブリッシング刊) のホームページです。

本書は、デザインパターンというものをやさしく解説した本です。 デザインパターンの原典に登場する23個のパターンすべてについて、 Java言語によるサンプルプログラムをつけています。

『Java言語で学ぶデザインパターン入門』は、 2001年に刊行されてから多数の読者にご愛読いただいています。 2003年には、インプレス社の 『コンピュータの名著・古典100冊』にも選ばれました。 みなさんに感謝します。

このたび、書籍全体をチェックして、より分かりやすく・読みやすくなるように細かな改訂作業を行いました。 また、巻末付録として、 デザインパターンに関して誤解されやすいポイントをQ&A形式で整理した「デザインパターンQ&A」 も追加し、 『増補改訂版Java言語で学ぶデザインパターン入門』として新たに刊行いたしました。 読者のみなさん、どうぞよろしくお願いいたします。

本書の想定読者

本書は、以下のような方にお勧めできる本です。

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

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

本書の目次

『増補改訂版Java言語で学ぶデザインパターン入門』
結城浩 著
ソフトバンクパブリッシング刊
ISBN4-7973-2703-0
税込価格3990円(本体価格3800円)

書籍の入手方法

以下のURLですぐに注文・購入できます。

もちろん全国の書店でもご購入できます。 店頭に見つからない場合には書店にご注文ください。

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

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

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

質問と回答

質問は、 フォームへどうぞ。返事はお約束できませんが、どんなことでもお気軽に。

誤りと訂正

読者さんからのご指摘を感謝します。 なお、これまでの『Java言語で学ぶデザインパターン入門』のサポートページは以下に移動しました。

======================================================================
(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);

ぜひ、感想をお送りください

あなたのご意見・感想をお送りください。 あなたの一言が大きなはげみとなりますので、どんなことでもどうぞ。

あなたの名前: メール:
学年・職業など: 年齢: 男性女性
(上の情報は、いずれも未記入でかまいません)

お手数ですが、以下の問いに答えてから送信してください(迷惑書き込み防止のため)。
今年は西暦何年ですか?

何かの理由でうまく送れない場合にはメールhyuki dot mail at hyuki dot comあてにお願いします。

書籍中の誤りのご指摘やご質問も歓迎いたします。

関連リンク

いろんな言語のIterator

結城浩のJava関連書籍

更新履歴

豊かな人生のための四つの法則