`
xuchunming
  • 浏览: 30217 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ruby学习笔记系列(3)

    博客分类:
  • ruby
阅读更多
经典Singletons

Sometimes you want to override the default way in which Ruby creates objects. As an
example, let’s look at our jukebox. Because we’ll have many jukeboxes, spread all over
the country, we want to make maintenance as easy as possible. Part of the requirement
is to log everything that happens to a jukebox: the songs played, the money received,
the strange fluids poured into it, and so on. Because we want to reserve the network
bandwidth for music, we’ll store these log files locally. This means we’ll need a class
that handles logging. However, we want only one logging object per jukebox, and we
want that object to be shared among all the other objects that use it.
Enter the Singleton pattern, documented in Design Patterns [GHJV95]. We’ll arrange
things so that the only way to create a logging object is to call MyLogger.create, and
we’ll ensure that only one logging object is ever created.
class MyLogger
private_class_method :new
@@logger = nil
def MyLogger.create
@@logger = new unless @@logger
@@logger
end
end
By making MyLogger’s new method private, we prevent anyone from creating a logging
object using the conventional constructor. Instead, we provide a class method,
MyLogger.create. This method uses the class variable @@logger to keep a reference
to a single instance of the logger, returning that instance every time it is called.3 We
can check this by looking at the object identifiers the method returns.
分享到:
评论

相关推荐

    个人ruby学习笔记

    从给定的文件信息中,我们可以提炼出一系列关于Ruby编程语言的重要知识点,涵盖基础语法、变量类型、数值操作、条件语句、循环结构以及字符串处理等核心领域。 ### Ruby基础语法 #### 注释 Ruby提供了两种注释方式...

    ruby笔记2ruby笔记2ruby笔记2

    "ruby笔记2ruby笔记2ruby笔记2"可能是指一系列关于Ruby学习的笔记,这些笔记可能涵盖了Ruby的基础概念、核心特性以及进阶话题。在Ruby的学习过程中,理解和掌握以下几个关键知识点至关重要: 1. **面向对象编程...

    Ruby学习资料(含参考手册和Programming Ruby)-中文.rar

    这份"Ruby学习资料(含参考手册和Programming Ruby)-中文.rar"压缩包包含了一系列的资源,帮助初学者和进阶者深入理解Ruby语言。 首先,"ruby中文文档(含参考手册和Programming Ruby).chm"是一个综合性的中文参考...

    Extjs 5 学习笔记

    ### Extjs 5 学习笔记之 SenchaCmd 深入解析 #### 一、SenchaCmd 的简介 SenchaCmd 是一个跨平台的命令行工具,它为基于 ExtJS 和 Sencha Touch 应用程序的开发周期提供了全面的支持。从创建应用程序的基础结构到...

    ruby on rails环境搭建学习笔记;passenger+nginx环境配置

    在进行 Ruby on Rails 的开发之前,首先需要完成一系列的基础软件安装工作,包括但不限于 Ruby 语言环境、Rails 框架、版本管理工具等。 ##### 安装基础依赖 1. **更新系统包列表:** ```sh sudo apt-get update...

    ROR 学习笔记系列一 Windows XP下环境安装配置(2)

    在本篇ROR(Ruby on Rails)学习笔记中,我们将深入探讨如何在Windows XP操作系统上进行环境的安装和配置。Ruby on Rails是一个流行的开源Web应用框架,它基于Ruby编程语言,以其“DRY”(Don't Repeat Yourself)...

    Ruby On Rails开发从头来系列教程(chm)

    摘要:一直想尝试Ruby On Rails,但是因为对apache,mysql都不熟,对Rails的环境搭建更是没信心,所以一直没有开始,从知道了InstantRails后,终于在windows上搭建了Ruby On Rails开发环境,开始了Rails的学习。...

    solr_学习笔记_v1.1

    ### Solr学习笔记_v1.1 - 高性能搜索引擎的核心参数与查询语法详解 #### 一、Query参数:深入理解Solr查询的核心要素 Solr作为高性能的全文搜索引擎,其强大的查询能力很大程度上依赖于一系列精细调整的参数。以下...

    GDAL-Python库学习笔记

    ### GDAL-Python库学习笔记 #### 一、GDAL 库简介 ##### 1.1 引言 GDAL(Geospatial Data Abstraction Library)是一个强大的库,旨在为栅格地理空间数据提供翻译与处理功能。对于从事地理信息系统(GIS)或遥感...

    java学习笔记JDK6课件和课本代码

    这个"java学习笔记JDK6课件和课本代码"资源很可能是包含了一系列的教程、PPT课件、示例代码和练习题,帮助初学者或者需要回顾JDK 6特性的开发者深入理解和实践。通过这些资料,你可以学习如何使用JDK 6中的新功能,...

    GDAL库学习笔记 资料

    ### GDAL库学习笔记知识点概览 #### 一、GDAL库简介 - **定义与功能**:GDAL(Geospatial Data Abstraction Library)是一个用于处理栅格地理空间数据格式的开源库,由开放源代码地理空间基金会(Open Source ...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记主要涵盖了Java开发工具集(Java Development Kit)的第六个主要版本,这是一个重要的里程碑,因为它为开发者提供了许多新特性和改进。在这个版本中,Java平台的稳定性和性能得到了显著提升,同时...

    rubylearningdotorg:Ruby学习课程

    标题"rubylearningdotorg:Ruby学习课程"表明这是一个关于学习Ruby编程语言的资源,可能包括一系列的教程、笔记或实践活动,适合初学者和有一定基础的开发者。"肯·麦卡登"可能是课程的创建者或主要贡献者,他可能是...

    calabash-android学习笔记V0.2.docx

    1. **安装Ruby**:确保已安装Ruby,并通过在终端中运行`ruby -v`检查版本,应显示“ruby 1.8.7”或更高版本。对于Windows用户,可以从RubyInstaller.org获取Ruby。 2. **安装Android SDK**:需要安装Android SDK,...

    GDAL学习笔记.doc

    GDAL不仅提供了一个统一的数据模型来处理多种格式的栅格数据,还附带了一系列命令行工具,用于数据转换和处理。 GDAL的核心功能在于其强大的数据格式支持,能够读取和写入众多的栅格数据格式,包括但不限于JPG、GIF...

    JSON学习笔记

    这篇"JSON学习笔记"可能涵盖了以下几个关键知识点: 1. JSON的基本结构:JSON数据由键值对(key-value pairs)组成,键和值之间用冒号隔开,键值对之间用逗号分隔。键必须是字符串,而值可以是字符串、数字、布尔值...

    GDAL库学习笔记.pdf

    该库由开源地理空间基金会(OSGeo)提供,采用X/MIT开源许可证,支持多种编程语言,如C/C++、Python、Ruby、VB、Java、C#等。GDAL被广泛应用于地理信息系统(GIS)和遥感(RS)领域。 GDAL安装: 1. GDAL的安装过程...

Global site tag (gtag.js) - Google Analytics