Ruby/Design Patterns/Singletons
Материал из Wiki.crossplatform.ru
Версия от 17:57, 13 сентября 2010; ViGOur (Обсуждение | вклад)
Содержание[убрать] |
Classes as Singletons
class ClassBasedLogger ERROR = 1 WARNING = 2 INFO = 3 @@log = File.open("log.txt", "w") @@level = WARNING def self.error(msg) @@log.puts(msg) @@log.flush end def self.warning(msg) @@log.puts(msg) if @@level >= WARNING @@log.flush end def self.info(msg) @@log.puts(msg) if @@level >= INFO @@log.flush end def self.level=(new_level) @@level = new_level end def self.level @@level end end ClassBasedLogger.level = ClassBasedLogger::INFO ClassBasedLogger.info("A") ClassBasedLogger.warning("B") ClassBasedLogger.error("C")
Define a singleton method, one that is tied to a single object
class Singleton end s = Singleton.new def s.handle puts "I"m a singleton method!" end s.handle # => I"m a singleton method!
define class methods by using a class within a class"s singleton class like the code
class Area class << self def rect( length, width, units="inches" ) area = length*width printf( "The area of this rectangle is %.2f %s.", area, units ) sprintf( "%.2f", area ) end end end Area.rect(10, 10) # The area of this rectangle is 100.00 inches.=> "100.00"
include Singleton
require "singleton" class Manager include Singleton def manage_resources puts("I am managing my resources") end end m = Manager.new
Modules as Singletons
module ModuleBasedLogger ERROR = 1 WARNING = 2 INFO = 3 @@log = File.open("log.txt", "w") @@level = WARNING def self.error(msg) @@log.puts(msg) @@log.flush end end ModuleBasedLogger.error("Computer wins chess game.")
Singleton a class
class MyLogger private_class_method :new @@logger = nil def MyLogger.create @@logger = new unless @@logger @@logger end end puts MyLogger.create.id puts MyLogger.create.id