0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

シングルトンパターンについて

Posted at

シングルトンパターンとは?

  • 多くの記事でシングルトンパターンとは、「インスタンスが1個しか生成されないことを保証したい時に使います。」と記載されていますが、実際には別にデフォルトシングルトンパターンが存在することを知らなかったので、ここにメモを残す。
  • まずシングルトンとは基本的には「インスタンスが1個しか生成されないことを保証したい時に使います。」で正しい。
  • どんな時に使うかというと通知をハンドリングするためのデリゲートクラスの呼び出しや、メモリを管理するためのクラス呼び出し時などです。シングルトンとは以下のようなものです。
public final class ExampleClass {
    static let shared = ExampleClass()

    private init() {
    /// 適当な処理を記載する。
    }
}
  • このように記述することで、そのクラスのインスタンスが1個しかプログラム内に生成されないことを保証してくれます。

しかし!

  • 時と場合によっては、そのクラスのインスタンスが複数個作られても、問題ない場合がある。
  • 簡単にいうと、見せかけのシングルトンだ。
  • 例えば、最もわかりやすい例をあげると、UserDefaultsなどがそうである。
UserDefaults.standard.set~
  • UserDefaultsを利用する際はこのように記述すると思うが、このstandardはまさにシングルトンである。しかし、UserDefaults自体は情報をプロジェクト内のどこかのファイルに書き込むため、毎回initしても問題はない。
  • このような形式的なシングルトンをデフォルトシングルトンパターンと呼ぶ。
  • その他にも意図的にこのようなクラスを作成できる。
final public class ExampleClass {
    static let `default` = ExampleClass()

    public init () {
    // 処理を記述
    }
}
  • この場合、シングルトンのように見えるかもしれないが、実際initをpublicにしているため、別のクラスから初期化も可能となっている。これもデフォルトシングルトンパターンである。
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?