JavaScriptでシングルトンクラス的な挙動を実装する - みかづきブログ その3
前回のシングルトンクラス風のクラスは超お手軽バーションだった故に、
- new で単一ではないインスタンスをつくれてしまう
- インスタンスがグローバルからアクセスできてしまう
という問題がありました。
もろもろ考えた結果、やっぱりシングルトンクラスがnewできてしまうのはまずいだろうということで、最近ではこんな感じで実装することにしてみてます。
JavaScript
// グローバルにネームスペースを切る (function(win) { "use strict"; win.App = win.App || {}; })(this); // シングルトンクラス (function(win, doc, ns) { "use strict"; var instance; function SingletonClass() { } function getInstance() { if (!instance) { instance = new SingletonClass(); } return instance; } ns.SingletonClass = { getInstance: getInstance }; })(this, document, App); // メインロジック (function(win, doc, ns) { "use strict"; var singletonClass = ns.SingletonClass.getInstance(); })(this, document, App);
はい。こんな感じです。
グローバルにはgetInstanceをもったobjectを公開しているので、newしようとすると怒られます。
また、シングルトンクラス内のinstanceも隠蔽されているため、getInstanceを使わずには取り出せません。
前回よりは良くなりましたね。
今回は以上です。