class Singleton
@@singleton_obj = nil
@@count = 0
# 以下の行をコメントアウトすると
# オブジェクトが再生成されるので
# シングルトンにならない
private_class_method:new
def initialize
@@count = 1
end
def self.get_instance
if @@singleton_obj == nil
@@singleton_obj = new
end
@@singleton_obj
end
def self.count_up
@@count+=1
end
def self.print_count
p @@count
end
end
p '-----------------------'
p '初回インスタンス取得'
p Singleton.get_instance
Singleton.print_count
p '-----------------------'
p '2回目のインスタンス取得でオブジェクトに変更がない'
p Singleton.get_instance
Singleton.count_up
Singleton.print_count
p '-----------------------'
p 'newするとエラーが飛ぶ'
begin
Singleton.new
rescue
p 'newでエラーが飛んだ'
end
require 'singleton'
class MySingleton
include Singleton
@@count = 0
def initialize
@@count = 1
end
def self.count_up
@@count+=1
end
def self.print_count
p @@count
end
end
p '-----------------------'
p '初回インスタンス取得'
p MySingleton.instance
MySingleton.print_count
p '-----------------------'
p '2回目のインスタンス取得でオブジェクトに変更がない'
p MySingleton.instance
MySingleton.count_up
MySingleton.print_count
p '-----------------------'
p 'newするとエラーが飛ぶ'
begin
MySingleton.new
rescue
p 'newでエラーが飛んだ'
end