站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
▼
建站程序
开发
服务器
办公软件
开发教程
▼
服务器教程
软件使用教程
运营教程
热门电子书
▼
CSS教程
WordPress教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
热点词条
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
Ruby-类,对象,变量
”(章节)
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
== 单例与其它构造器 == 有时你可能会想要重写Ruby的默认构造方法,我们仍旧用点唱机来做例子。因为我们在全国各处有很多点唱机,于是就想要让维护工作变得简单一些。我们需要把在点唱机上发生的事件以日志形式全部记录下来,像被点唱的歌曲,收到的钱,可疑的流量等等,为了节约带宽,这些日志保存在本地,我们需要一个类来处理这些日志,但是,我们希望一个点唱机只有一个日志对象,还希望所有使用这个日志对象的其它对象共享它(译者注:意即所有对象只使用一个日志对象)。<br> 通过使用《设计模式》中提到的单例模式,要做到上述这些要求就只有一种办法来创建日志对象,调用Logger.create方法,还要确保只有一个日志对象被创建。 <br> class Logger<br> private_class_method :new<br> @@logger = nil<br> def Logger.create<br> @@logger = new unless @@logger<br> @@logger<br> end<br> end <br> 把Logger的new方法声明为私有来防止其他人调用默认构造器创建日志对象,取而代之,我们提供了一个类方法Logger.create,它使用类变量@@logger来保持对一个单个的日志对象的实例的引用,每次调用这个方法时都返回这个实例。(我们这里介绍的单例的引用并不是线程安全的,如果多个线程同时运行,就有可能会创建多个日志对象。我们可以使用ruby提供的单例混合,而不必自己处理线程安全问题,在468页有详细描述。)我们可以查看方法返回的对象标识符来观察一下。<br> Logger.create.id >> 537766930 <br> Logger.create.id >> 537766930 <br> 使用类方法来伪造构造器,也可以让那些使用你的类的人倍感轻松。举一个小例子,Shape类描述正多边形,创建Shape类的实例需要提供边数和总的周长给构造器。<br> class Shape<br> def initialize(numSides, perimeter)v # ...<br> end<br> end <br> 但是,几年以后这个类用在另外的程序中,程序员需要通过指定名字和边的长度来创建多边形而不是用周长,这时只需要简单地向Shape类中添加一些类方法。<br> class Shape<br> def Shape.triangle(sideLength)<br> Shape.new(3, sideLength*3)<br> end<br> def Shape.square(sideLength)<br> Shape.new(4, sideLength*4)<br> end<br> end <br> 类方法还有许多有趣而强大的功能,不过继续探讨它们不会加快我们开发点唱机的进度,还是让我们继续吧。<br>
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)