技術メモ

技術メモ

ラフなメモ

Javaのデザインパターンを整理(生成編)

Javaデザインパターンについて復習します。プログラムをデザインするにあたって、参考にできる引き出しは多く持っておきたいです。

デザインパターンとは

過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したもの

有名なのはGoFの23のデザインパターンです。それぞれのデザインパターンは3つの分類に分かれています。

  • オブジェクトの「生成」に関するパターン
  • プログラムの「構造」に関するパターン
  • オブジェクトの「振る舞い」に関するパターン

生成に関するパターン

パターン名 概要
AbstractFactory 関連する一連のインスタンスを状況に応じて適切に生成する方法を提供する
Builder 複合化されたインスタンスの生成過程を隠蔽する
Singleton あるクラスについて、インスタンスが単一であることを保証する
FactoryMethod 実際に生成されるインスタンスに依存しない、インスタンスの生成方法を提供する
Prototype 同様のインスタンスを生成するために、原型のインスタンスを複製する

AbstractFactoryパターン

  • 概要
    • AbstractFactoryパターンは関連する一連のインスタンスを状況に応じて適切に生成する方法を提供します。
    • インスタンスの生成を専門に行うクラス(Factory)を用意することで、整合性を必要とする一連のオブジェクト群を間違いなく生成します。
  • 何が嬉しいか
    • 環境や条件によって処理パターンを切り替えて実行する仕組みを実現する場合に、利用者が具体的な実装を意識せず透過的に呼び出せます。

クラス図

f:id:tutuz:20190511100819p:plain

Builderパターン

  • 概要
    • 生成過程が決まっている場合に、生成過程を隠蔽することで同じ過程で異なる内部形式のインスタンスを生成する方法を提供します。
  • 何が嬉しいか
    • 生成処理の流れを意識することなく、個別の処理のみに注目して実装することができます。

クラス図

f:id:tutuz:20190511103736p:plain

  • Director
    • 生成物の作成過程を管理
  • Builder
    • 各生成物の中身を実装

Singletonパターン

クラス図

実装例

Singletonの実装方法についてはいくつか方法がありますが、以下はstaticファクトリーメソッドによるSingletonの実装です。

public class Singleton {

    private static Singleton instance = new Singleton();

    private Singleton() {}

    public static synchronized Singleton getInstance() {
        return instance;
    }
}
public class Main {
    public static void main(String[] args) {
        Singleton config = Singleton.getInstance();
    }
}

参考

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで