7 Stimmen

die Erstellung von mehreren Objekten einer Klasse blockieren

Wie beschränke ich das Objekt einer Klasse auf eine. Meine Klasse sieht aus wie :

class Speaker
  include Mongoid::Document
  field :name, :type => String
end

Ich möchte nur eine einzige Instanz von Lautsprecher . Eine Möglichkeit wäre, eine Validierung hinzuzufügen, die die Anzahl der bereits vorhandenen Objekte der Klasse Speaker überprüfen würde. Gibt es eine Ruby-Weise, etwas zu tun?

2voto

andersonvom Punkte 11529

Mit dem Singleton-Modul und ein wenig Überschreiben seiner Methoden, ich glaube, dies funktioniert und es ist Thread sicher (auf Ruby 1.8):

class Speaker 

  include Singleton
  include Mongoid::Document
  field :name, :type => String

  @@singleton__instance__ = nil
  @@singleton__mutex__ = Mutex.new

  def self.instance
    return @@singleton__instance__ if @@singleton__instance__
    @@singleton__mutex__.synchronize {
      return @@singleton__instance__ if @@singleton__instance__
      @@singleton__instance__ = self.first
      @@singleton__instance__ ||= new()
    }
    @@singleton__instance__
  end

  def destroy
    @@singleton__mutex__.synchronize {
      super
      @@singleton__instance__ = nil
    }
  end

end

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X