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

概要

Java言語で学ぶデザインパターン入門』を読み終えました。

モチベーション

主にこれを読もうと思ったのは、最近仕事中にやたらとアーキテクチャ系の疑問が出てきたり、議論しつつ決着がつかないということが多く、 自分の設計への理解不足を痛感したからです。(エンジニアリングむずすぎる)

デザインパターン銀の弾丸だと思って、読み進めたのですが、結論から言うと今の所直接的には何も役になっていません

ちなみに業務ではGoを使っているのですが、一年ほど前まではJavaのエンジニアだったのでコード自体の理解はなんとか大丈夫でした。

印象に残ったパターン

Template method Pattern

public abstract class AbstractDisplay { // 抽象クラスAbstractDisplay
    public abstract void open();        // サブクラスに実装をまかせる抽象メソッド(1) open
    public abstract void print();       // サブクラスに実装をまかせる抽象メソッド(2) print
    public abstract void close();       // サブクラスに実装をまかせる抽象メソッド(3) close
    public final void display() {       // この抽象クラスで実装しているメソッドdisplay
        open();                             // まずopenして…
        for (int i = 0; i < 5; i++) {       // 5回printを繰り返して…
            print();                    
        }
        close();                            // …最後にcloseする。これがdisplayメソッドで実装されている内容。
    }
}

上記のような構成でこのクラスを継承させた先に各メソッドの実装は任せつつ大元の処理の流れを決めるというもの。 綺麗だな〜頭いいな〜と思いました。

これが後から色々なパターンで出てくるので重要らしいです。 多分Goでは抽象メソッドがないのでできない。

Strategy Pattern

インターフェースの型に対して、パターンに合わせて実装を注入するというもの。 DIがやってることと同じ?という感想でした。

State Pattern

これぞOOPというような、オブジェクトによって振る舞いを変えるというもの。

Abstract Factory Pattern

難しすぎて理解できず印象に残った。 筆者もデザインパターンの中で一番難しかったと述べています。

感想

書いてみて基本簡単なパターンしか印象に残っていなかったことに気づき悲しいです。 最近ずっと書いているGoでは継承がないので、直接使えないパターンもいくつかあったのですが、 移譲で代用する方法なども書かれていたので、機会があれば使ってみたいです。

普段何気なく書いているコードが実はこのパターンだった、頭いい!みたいな嬉しい気持ちにも時々なれました。 感覚で理解したつもりになっていたものをしっかりパターンとして落とし込むことで多少は理解が深まった(と思いたい)です。

加えてかなり良かったのが、UMLのクラス図の記法にに慣れられたことです。 完全に副産物なんですが、今までUMLの話題になるたびにIT専科を見に行ってましたが、 23パターン分のクラス図を見たのでだいたい覚えることができたことはかなりでかい。

総じていうとやはりOOP言語を使うハイレベルな開発者でデザインパターンのことをほぼ知らない人はいないと思うので、 開発者としてレベルアップするための一つの必須項目なんだと思います。 今後のじわじわと効いてくると嬉しいなという感じです。

まとまりはないですが、これからも読み終わったらちょくちょく更新していきます。