実装サンプル
サンプル概要
あるサイトのアクティブユーザーを管理するクラスを実装したいとします。
このアクティブユーザーの管理をSingletonで行います。
登場人物
Singleton = active_user.rb:一意なアクティブユーザー数を管理するクラス
main = 動作確認用メイン処理
サンプルコード
active_user.rb
# encoding: Shift_JIS =begin rdoc = ActiveUserクラス =end class ActiveUser @@active_user = nil attr_accessor :acrive_user_count def self.instance return @@active_user if @@active_user @@active_user=new end private_class_method:new def initialize @acrive_user_count=0 end end
main.rb
# encoding: Shift_JIS require_relative './active_user' require_relative './active_user2' a = ActiveUser.instance b = ActiveUser.instance a.acrive_user_count += 1 p a.acrive_user_count b.acrive_user_count += 1 p b.acrive_user_count
出力
1 2
補足
Rubyはシングルトンをサポートしているため、実際には以下のコードで問題ない
active_user2.rb
# encoding: Shift_JIS require 'singleton' =begin rdoc = ActiveUserクラス =end class ActiveUser2 include Singleton attr_accessor :acrive_user_count def initialize @acrive_user_count=0 end end
main.rb
c = ActiveUser2.instance d = ActiveUser2.instance c.acrive_user_count += 1 p c.acrive_user_count d.acrive_user_count += 1 p d.acrive_user_count
出力
1 2