单例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
分享到:
相关推荐
《Ruby设计模式》以通俗易懂的方式介绍了Ruby设计模式,主要包括Ruby概述、使用模板方法变换算法、使用策略替换算法、通过观察器保持协调、通过迭代器遍历集合、使用命令模式完成任务、使用适配器填补空隙、使用装饰...
本书以通俗易懂的方式介绍了Ruby设计模式,主要包括Ruby概述、使用模板方法变换算法、使用策略替换算法、通过观察器保持协调、通过迭代器遍历集合、使用命令模式完成任务、使用适配器填补空隙、使用装饰器改善对象、...
Ruby虽然相对年轻,但其丰富的类库和元编程特性使其在实现设计模式时具有独特的优势。 在Ruby中,设计模式分为创建型、结构型和行为型三大类。创建型模式如单例模式(Singleton)、工厂方法(Factory Method)和...
### 详解Ruby设计模式编程中对单例模式的运用 #### 概述 单例模式是一种常见的设计模式,它的核心思想在于确保一个类只有一个实例,并且这个实例可以通过一个全局访问点进行访问。在Ruby语言中,单例模式的实现...
"Ruby中的GoF设计模式实现"是指在Ruby编程语言中应用Gang of Four(GoF)设计模式。GoF设计模式是四本同名书籍中的核心概念,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位作者提出,书中总结了...
Ruby 的设计模式 设计模式 处理对象创建机制的设计模式,尝试以适合情况的方式创建对象。 - 用于创建和使用相关/依赖对象系列 - 用于逐步创建不同类型的复杂对象 - 用于从许多对象中创建一种可以代替它使用的对象 ...
《Ruby设计模式》是Russ Olsen著作的一本关于Ruby编程语言中的设计模式的书籍。设计模式是一种在特定情境下解决问题的可复用方案,它代表了软件设计中的最佳实践。Ruby,作为一门动态、灵活的面向对象语言,其设计...
常见的设计模式包括工厂模式、单例模式、策略模式、观察者模式等。 在引用的内容中,我们可以看到出版社、作者以及其他相关出版信息。《Ruby面向对象设计》一书由Pearson Education出版社发行,该出版社是全球教育...
《Ruby面向对象设计实践》介绍了一些常用的设计模式,如工厂模式、单例模式、策略模式等,帮助开发者更好地组织代码结构,提高代码的可读性和可维护性。 #### 四、实战案例分析 书中通过具体的案例来展示如何运用...
在Ruby语言中,设计模式同样发挥着重要作用,帮助开发者构建可扩展、可维护和可复用的代码。下面将详细介绍标题和描述中提到的几种设计模式: 1. **工厂模式**(Factory Pattern):工厂模式提供了一种创建对象的...
设计模式是软件开发中的一个重要概念,它源自于面向对象编程领域,旨在提供一套解决常见问题的标准化方案。《设计模式:可复用面向对象软件的基础》是一本经典的著作,由Erich Gamma、Richard Helm、Ralph Johnson和...
《Design Patterns in Ruby Dec 2007》是关于Ruby编程语言中设计模式的一份珍贵资料,这份2007年发布的PDF文档深入探讨了如何在Ruby语言中应用经典的设计模式。设计模式是软件工程中经过实践证明的有效解决方案模板...
Ruby中可以实现各种设计模式,如工厂模式、单例模式、装饰器模式、观察者模式等。这些模式可以帮助写出更灵活、可维护的代码。 5. **数据结构**:Ruby内建了丰富的数据结构,如数组(Array)、哈希(Hash)、集合...
在Ruby的世界里,设计模式(Design Patterns)是解决软件工程中常见问题的一种可复用解决方案。根据提供的文件信息,我们深入探讨一下GoF(Gang of Four)设计模式在Ruby中的应用,这将涵盖创建型、结构型以及行为型...
10. **设计模式**:书中的一些问题可能会涉及到常见的设计模式,如工厂模式、单例模式、装饰器模式等,这些都是软件工程中重要的思想。 通过阅读《Ruby Quiz》,你不仅可以提高Ruby编程技巧,还能了解到一些最佳...
3. **设计模式**:介绍常见的设计模式,如单例模式、工厂模式等,并探讨它们在Ruby中的具体应用。 ### 结语 通过以上内容可以看出,《Ruby从入门到精通》这本书覆盖了从基础知识到高级技术的各个方面,非常适合...
名字灵感来源于Perl和Smalltalk两个词的结合——Perl的发音接近于“Pearl”,而Smalltalk则是最早的面向对象语言之一,因此将这两个词合并为“Ruby”。 **1.3 Ruby的特点** - **简洁性:** Ruby的设计非常注重代码...