中国银行 杨益民:RUBY设计模式之单例模式
来源:百度文库 编辑:中财网 时间:2024/04/26 14:02:38
RUBY设计模式之单例模式
- 博客分类:
- RUBY
单例singleton,是所有设计模式中最简单的,但又是问题最多的。其实并不简单,一定要慎用。
singleton,和全局变量很相似,所以要尽量的不用它,问题也就不会出来。而不是我们常常说的那样这个我们可以用
singleton来实现。不出问题的唯一方法就是:别那么做。
如果要使用了,在使用之前必须知道你要做的东西是否必须要用他来实现,还有就是要进行严密的测试。这样说是有
事实依据的,我们现在跑了三四年的程序中就有好几个地方用到的,在这期间发生了很多问题都和它有关。其中一个问题是
想写一个singleton,但是没有安装标注去写,也没有严密的测试,结果造成了非常严重的后果。
下面是ruby实现singleton一些方法。大家多提意见。
Ruby代码
- #
- # one
- #
- class SimpleLogger
- attr_accessor :level
- ERROR = 1
- WARNING = 2
- INFO = 3
- def initialize
- @log = File.open("log.txt","w+")
- @level = WARNING
- end
- def error(msg)
- @log.puts("ERROR:" + msg)
- @log.flush
- end
- def warning(msg)
- @log.puts("WARNING:" + msg) if @level >= WARNING
- @log.flush
- end
- def info(msg)
- @log.puts("INFO:" + msg) if @level >= INFO
- @log.flush
- end
- #
- # 创建单例模式,需要将这些方法放在initialize方法之后,要记住ruby是动态的
- #
- @@instance = SimpleLogger.new
- def self.instance
- return @@instance
- end
- private_class_method :new
- end
- logger1 = SimpleLogger.instance
- logger2 = SimpleLogger.instance
- SimpleLogger.instance.info('Computer wins chess game1')
- SimpleLogger.instance.warning('Computer wins chess game2')
- #
- # two
- #
- require 'singleton'
- class SimpleLogger2
- include Singleton
- attr_accessor :level
- ERROR = 1
- WARNING = 2
- INFO = 3
- def initialize
- @log = File.open("log.txt","w+")
- @level = WARNING
- end
- def error(msg)
- @log.puts("ERROR:" + msg)
- @log.flush
- end
- def warning(msg)
- @log.puts("WARNING:" + msg) if @level >= WARNING
- @log.flush
- end
- def info(msg)
- @log.puts("INFO:" + msg) if @level >= INFO
- @log.flush
- end
- end
- SimpleLogger.instance.error('Computer wins chess game14444444444')
- SimpleLogger.instance.warning('Computer wins chess game24444444')
- #
- # three 使用类作为单例
- #
- class ClassBasedLogger
- ERROR = 1
- WARNING = 2
- INFO = 3
- @@log = File.open("log.txt","w+")
- @@level = WARNING
- def self.error(msg)
- @@log.puts("ERROR:" + msg)
- @@log.flush
- end
- def self.warning(msg)
- @@log.puts("WARNING:" + msg) if @level >= WARNING
- @@log.flush
- end
- def self.info(msg)
- @@log.puts("INFO:" + msg) if @level >= INFO
- @@log.flush
- end
- def self.level
- @@level
- end
- def self.level=(new_level)
- @@level = new_level
- end
- end
- #
- # four 使用模组作为单例,使用模组的好处是不能创建模组的实例
- #
- module ModuleBasedLogger
- ERROR = 1
- WARNING = 2
- INFO = 3
- @@log = File.open("log.txt","w+")
- @@level = WARNING
- def self.error(msg)
- @@log.puts("ERROR:" + msg)
- @@log.flush
- end
- def self.warning(msg)
- @@log.puts("WARNING:" + msg) if @level >= WARNING
- @@log.flush
- end
- def self.info(msg)
- @@log.puts("INFO:" + msg) if @level >= INFO
- @@log.flush
- end
- def self.level
- @@level
- end
- def self.level=(new_level)
- @@level = new_level
- end
- end
急需(面向对象)设计模式之观察者模式的简单C++程序!!!
ASP设计模式参考书
j2ee设计模式与java设计模式一样吗
VS2005设计视图模式问题
硬盘传输模式之惑
高手过招 之 安全模式
安全模式之高手过招
C#中如何应用MVC设计模式
现代厨房设计的基本模式
关于activex控件设计模式的问题
烈火之剑如何进入困难模式?
《新鬼武者 梦之觉醒》双人游戏模式
烈火之剑怎么进入hard模式?
烈火之剑怎么进入hard模式??
英雄无敌之死亡阴影不能单人模式
苍之涛能不能窗口模式玩
(单选题)Internet的顶级域名有两种模式,它们是( ).
自动对焦模式:单按/监控/连续是什么意思?
魔兽沉沦单英雄模式,物品怎么切换?
单sata硬盘能不能真正工作在sata模式下?
win32模式是什么模式?
什么叫行为模式,一个咖啡厅的设计,行为模式是怎样的啊?
究竟是谁设计的人生的模式啊?
电脑为什么要设计安全模式?有什么作用?