デザインパターン-Singleton

Singletonパターンとは

Singletonパターンとは、インスタンスがひとつであることを保証するデザインパターンです。
「Singleton」は「単独個体」という意味の英語です。


Singletonパターンの利点

Singletonパターンは、複数オブジェクトを作成させないことを保証したい場合に適用します。
オブジェクトを生成すること(new)は非常に負荷のかかる処理です。
使いまわしが効くオブジェクトを毎回生成(new)することは、速度性能上の問題となりますので、初めに生成したオブジェクトを再利用すぺきです。

例えば、システム内で共通のキャッシュテーブルを参照させる場合などに、シングルトンパターンを適用することで高速化または効率化することが可能となります。


構成要素

  • Singleton
    • 唯一のオブジェクトを返す役です。
    • getInstanceメソッドで常に同じオブジェクトを返します。

rubyによるSingletonパターンの実装


#!/usr/bin/env ruby

class SingletonPattern
  # newの呼び出しを禁止
  private_class_method :new
  @@singleObject = nil

  # インスタンス作成用メソッド
  def self.create
    @@singleObject = new if(@@singleObject == nil)
    return(@@singleObject)
  end
end

obj1 = SingletonPattern.create
obj2 = SingletonPattern.create
puts("Not Singleton") if(obj1 != obj2)

Rubyの機能を利用する。

Rubyは言語としてシングルトンをサポートしています。

シングルトンパターンを実現するには、singletonモジュールをincludeします。

なお、Singletonモジュールをインクルードした場合はcloneメソッドでの複製はできません。


#!/usr/bin/env ruby

require 'singleton'

# シングルトン
class SingletonPattern
  include Singleton
  attr_accessor :counter
  
  def initialize
    @counter = 0
  end
end

obj1 = SingletonPattern.instance
obj1.counter += 1
puts(obj1.counter) # 1

obj2 = SingletonPattern.instance
obj2.counter += 1
puts(obj2.counter) # 2


関連ページ