JavaScriptで理解するデザインパターン -シングルトンパターン
TOC
シングルトンパターンは、特定のクラスのインスタンスが1つだけ生成されることを保証するデザインパターンです。 この記事では、JavaScriptでのシングルトンパターンの実装方法と、その活用例についてまとめます。
シングルトンパターンとは?
シングルトンパターンは、一度だけの初期化や共有リソースのアクセスなど、システム全体で一意であるべきオブジェクトを管理するためのパターンです。シングルトンオブジェクトは、そのインスタンスを必要とする他のオブジェクトに共有されます。
JavaScriptでの実装方法
クラスを利用する方法
ES6から導入されたクラスを使用して、シングルトンの特性を持つクラスを定義する方法です。
class Singleton {
static _instance = null;
constructor() {
if (Singleton._instance) {
throw new Error('Singletonインスタンスは既に存在します。');
}
Singleton._instance = this;
}
static getInstance() {
if (!this._instance) {
this._instance = new Singleton();
}
return this._instance;
}
}
オブジェクトリテラルを利用する方法
オブジェクトリテラルは、そのままの形で一意なオブジェクトを作成するため、シングルトンの性質をデフォルトで持っています。
const singleton = {
property1: 'value1',
method1: function() {
// ...
}
};
クロージャを利用する方法
クロージャを利用して、privateな変数やメソッドを持つシングルトンオブジェクトを作成する方法です。
const Singleton = (function() {
let instance;
function init() {
return {
property1: 'value1',
method1: function() {
// ...
}
};
}
return {
getInstance: function() {
if (!instance) {
instance = init();
}
return instance;
}
};
})();
シングルトンの活用例
- 設定管理: システムの設定情報を一箇所で管理する場合に使用します。
- ログ管理: ログ情報を一箇所で集約して管理する場面で活用できます。
- データベース接続: 一つのデータベース接続をシステム全体で共有したい場合に適しています。
注意点
シングルトンがグローバルな状態を持つため、使用する際には注意が必要です。グローバルな状態は、コードの結合度を高め、テストやデバッグが難しくなる可能性があります。また、同時アクセスの問題も考慮する必要があります。
まとめ
シングルトンパターンは、特定のリソースや設定をシステム全体で共有する必要がある場合に非常に役立ちます。ただし、その利点と欠点を理解し、適切に使用することが重要です。
Search Posts