LoginSignup
2
1

More than 5 years have passed since last update.

Singleton(シングルトン)パターン

Last updated at Posted at 2019-02-24

image.png

1つずつデザインパターンをまとめ

総論

パターンそのものと使い所を理解する

Singleton(シングルトン)パターン

唯一のオブジェクト、グローバルアクセスを実現するパターン
あるクラスからは1つしかインスタンスを生成できない事を保証することでアクセスはどこからでもできるようにするパターン

Singletonのテンプレート

ParentSingleton.rb
require 'singleton'

class ParentSingleton
  attr_reader :settings

  def initialize
    @settings = {property: 'value'}
  end
end
ParentSingleton.rb
require './SubSingleton'

class SubSingleton < ParentSingleton
  include Singleton
end
main.rb
require './SubSingleton'

class Main
  object1 = SubSingleton.instance
  puts(object1.settings[:property])

  object2 = SubSingleton.instance
  puts(object2.settings[:property])
end

使い所

主なのは以下3点

  • ログ(logger)
  • 設定情報(settings)
  • DB接続機構(conection pooling)

特徴

  • Railsとか使うとあんまり自分自身が実装する所ない(必要そうな箇所は既に提供されている)
  • グローバルなのでちゃんと理解しないと使えないといわれがちな為、使いにくい
  • Rubyには標準のsingletonモジュールで提供されている
  • テストにおいて依存問題が発生し易い
  • クラスの結合度が高くなる

考え方

  • singletonモジュールの内部ではstaticにインスタンスを保持し、呼び出し側ではその保持されたインスタンスのみを取得することで状態を保持し続けているオブジェクトを取得する
  • またコンストラクタしようとするとエラーが発生する(べき)

ポイント

  • Rubyで自身で実装しようとすると、言語特性上の問題もあり、singletonを満す実装自体が大変
  • 既存のsingletonメソッドを利用する場合果たしてそれを呼び出して良い場所なのか吟味する必要がある

書籍情報

Russ Olsen, Rubyによるデザインパターン
https://amzn.to/2PFKt6m

雑感

作る、使えるかは置いといて、ひとまず知っといておくべき系パターンと解釈

2
1
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
2
1