🕵️ デザインパターンとは#
デザインパターン(Design pattern)は、繰り返し使用され、多くの人に知られている、分類されたコード設計の経験のまとめです。デザインパターンの使用は、再利用可能なコードを作成し、他の人がコードを理解しやすくし、コードの信頼性を確保するためです。デザインパターンは、自分自身、他の人、システムにとっても利益をもたらします。デザインパターンは、コードのエンジニアリング化を実現し、ソフトウェアエンジニアリングの基礎となります。それはまるで建物の一つ一つの石のようです。プロジェクトでデザインパターンを適切に使用することで、多くの問題を完璧に解決することができます。各パターンには、それに対応する原則があり、それが広く適用される理由です。簡単に言えば:
パターン: 特定のシナリオに対する一般的な解決策。
シナリオ: プロジェクトが存在する環境
問題: 制約条件、プロジェクトの目標など
解決策: 一般的で再利用可能な設計、制約を解決し目標を達成するためのもの。
🗂️ 分類#
- 生成パターン
オブジェクトのインスタンス化パターンで、生成パターンはオブジェクトのインスタンス化プロセスを切り離すために使用されます。 - 構造パターン
クラスまたはオブジェクトを組み合わせてより大きな構造を形成します。 - 振る舞いパターン
クラスやオブジェクトの相互作用方法、責任の分割、アルゴリズムを定義します。
🔒 シングルトンパターン#
特定のクラスが 1 つのオブジェクトしか作成しないようにする
- コンストラクタをプライベートにする。オブジェクトの作成にはコンストラクタが使用されるため、コンストラクタの使用を制限することでオブジェクトの作成を制限できます。
- オブジェクトを保存するための静的変数を作成する。
- オブジェクトを取得するためのメソッドを提供する(必ず静的メソッドであること)。
饿汉モード#
class HungrySingleton {
private HungrySingleton() {
System.out.println("HungrySingletonのコンストラクタが実行されました");
}
static HungrySingleton instance = new HungrySingleton();
static HungrySingleton getInstance() {
return instance;
}
}
特徴: クラスがロードされると、静的変数instance
が初期化され、この時点でクラスのプライベートコンストラクタが呼び出され、シングルトンクラスの唯一のインスタンスが作成されます。
懒汉モード#
class LazySingleton {
private LazySingleton() {
System.out.println("LazySingletonのコンストラクタが実行されました");
}
private static LazySingleton instance = null;
static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
特徴: このモードは、最初に参照されたときにのみインスタンス化されます。つまり、クラスのロード時に自分自身をインスタンス化しません。getInstance()
メソッドが最初に呼び出されたときにインスタンス化されます。この技術は遅延ロード技術とも呼ばれ、必要な時にのみインスタンスをロードすることを意味します。