您的位置:首页 > 其它

cisco 交换机命名规则

2009-03-12 23:42 330 查看
     单例singleton,是所有设计模式中最简单的,但又是问题最多的。其实并不简单,一定要慎用。

 

     singleton,和全局变量很相似,所以要尽量的不用它,问题也就不会出来。而不是我们常常说的那样这个我们可以用

 

singleton来实现。不出问题的唯一方法就是:别那么做。

 

     如果要使用了,在使用之前必须知道你要做的东西是否必须要用他来实现,还有就是要进行严密的测试。这样说是有

 

事实依据的,我们现在跑了三四年的程序中就有好几个地方用到的,在这期间发生了很多问题都和它有关。其中一个问题是

 

想写一个singleton,但是没有安装标注去写,也没有严密的测试,结果造成了非常严重的后果。

 

 

    下面是ruby实现singleton一些方法。大家多提意见。

 

 

#
# 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

 
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: