05-单例(Singleton)模式Ruby实现
Posted 架构设计模式
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了05-单例(Singleton)模式Ruby实现相关的知识,希望对你有一定的参考价值。
摘要:本文用一个实例场景描述Gof 23设计模式中的单例模式,并用Ruby实现程序代码给予实现,同时也给出实现代码的UML模型。
关键字:Gof 23 设计模式 单例模式 Ruby
Singleton Patternbased on Ruby
REN gang
Abstract:This paper gives a scene example to describe theuse of Singleton Pattern of Gof 23 Design Pattern, and achieves the example by Ruby,at the same time, gives the UML model of realization of the example.
Key word: Gof 23; DesignPattern ; Singleton Pattern Ruby
1. 标准定义
单例模式标准定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
2. 分析和说明
单例模式属于创建型模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且其它类可以通过某种方法访问该实例。单例模式只应在有真正的“单一实例”的需求时才可使用。Singleton结构如图1所示。单例模式只有一个角色,就是要进行单例的类。
图1单例模式结构
2 应用场景举例
比如公司规定,一个市场用户只能由一个市场人员跟踪。最初用户联系公司的时候,任命一个市场人员负责这个用户。以后这个用户再继续联系公司,全部统一由指定的这个市场人员来负责。在这里可以把SaleMan就是一个要求单例的类,ServiceManager是一个提供单例方法的类。其实现类图见图2。
图2 单例模式的类图
3.Ruby的实现程序代码
Ruby程序实现主要包括ServiceManager类和SaleMan类。下面分别列出这2个类的程序代码,最后列出测试代码并显示输出结果。
程序代码清单
#!/creationalpatterns/singleton
class SaleMan
def initialize(name,service) @name = name @service = service end
def getName @name end
def setName(value) @name = value end
def getService @service end
def setService(value) @service = value end end
class ServiceManager
def initialize(value) @saleMan = value end
def ServiceManager(value) @saleMan = value end
def getSaleManService if @saleMan != nil @saleMan end @saleMan end end
# ————————main主程序应用————————
saleMan = SaleMan.new("小刘", "小刘的服务") service = ServiceManager.new(saleMan)
puts"第一次获得服务:" saleman = service.getSaleManService() puts saleman.getService()
puts "第二次获得服务:" saleman = service.getSaleManService() puts saleman.getService()
puts "第三次获得服务:" saleman = service.getSaleManService() puts saleman.getService()
BEGIN { puts "———这是singleton的输出开始———" }
END { puts "———这是singleton的输出结束———" }
|
单例模式测试类输出结果如下所示:
———这是singleton的输出开始——— 第一次获得服务: 小刘的服务 第二次获得服务: 小刘的服务 第三次获得服务: 小刘的服务 ———这是singleton的输出结束——— |
参考文献
[1] E.Gamma, R.Helm, R.Johnson, andVlissides. Design Patterns Elements of Reusable Object Oriented Software. Addison-Wesley,1995
[2] E.Gamma, R.Helm, R.Johnson, andVlissides.著,李英军等译,设计模式:可复用面向对象软件的基础,北京:机械工业出版社.2000.9.
[3] (日)高桥征义,(日)后藤裕藏 著,何文斯 译,Ruby基础教程(第4版),北京:人民邮电出版社.2014.09
[4] 许勇 等编著,Ruby on Rails 程序设计 深入剖析与范例应用,北京:清华大学出版社.2013.07
[5] (美)梅茨 著,张雪平,彭晓东译,面向对象设计实践指南:Ruby语言描述,北京:人民邮电出版社.2014.01
[6] Ruby官方网站:www.ruby-lang.org.
[7] Ruby教程 http://www.runoob.com/ruby/ruby-tutorial.html.
以上是关于05-单例(Singleton)模式Ruby实现的主要内容,如果未能解决你的问题,请参考以下文章