Singleton Pattern(シングルトンパターン)とは
Singleton Pattern の基本的な考え方を、Ruby のコード例を交えて紹介します。
Singleton Pattern(シングルトンパターン)とは#
Singleton Pattern(シングルトンパターン)は、そのクラスのインスタンスを1つに限定し、どこから取得しても同じインスタンスを利用する設計パターンです。
どこから取得しても同じインスタンスが返るので、例えばアプリ全体で1つだけあればいい設定などで使用します。
参考例#
例えば、普通のクラスでは次のようになります。
class AppConfig
end
a = AppConfig.new
b = AppConfig.new
a.equal?(b)
# => false
a と b は別のインスタンスです。
もし AppConfig が Singleton だとすると、次のようになります。
require "singleton"
class AppConfig
include Singleton
end
a = AppConfig.instance
b = AppConfig.instance
a.equal?(b)
# => true
今度は a と b が同じインスタンスになります。
どういう時に使うのか#
例としてよく出るのは、次のようなものです。
- 設定管理
- Logger
- キャッシュ管理
注意点#
「どこからでも同じオブジェクトにアクセスできる」という性質は、実質的にグローバル変数に近くなりやすいです。
その結果、依存関係がわかりにくくなったり、どこから変更されたのか追いづらくなったりといった問題が起こりやすいため、積極的に使うものではありません。
なぜこのような記事を書いたのか#
概念は何となくわかるし、見かけたことも触ったこともあるけど、そういうものに名前がついていると知らずに使っている設計パターンがたくさんあることに気づきました。
それなら、一つずつ記事に残して整理していこうと思ったのがきっかけです。
エンジニア界隈では「こんなの当たり前だろ」って感じかもしれないですが、自分は経験があっても知識として整理できていないことがまだまだあります。
今までの開発経験を振り返りつつ、こうした知識をこのサイトの記事としてアウトプットしていけたらいいな、と思います。
まとめ#
Singleton Pattern(シングルトンパターン)とは、あるクラスのインスタンスを1つに限定し、同じインスタンスを共有する設計パターンのことである。

コメントについて