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 单例模式的类图

 

3Ruby的实现程序代码

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.著,李英军等译,设计模式:可复用面向对象软件的基础,北京:机械工业出版社.20009

[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实现的主要内容,如果未能解决你的问题,请参考以下文章

单例模式(Singleton)的6种实现

C++ 单例模式(singleton)

C++ 单例模式(singleton)

经典算法题: 实现Singleton单例模式

JS设计模式---单例(Singleton)模式

设计模式--单例模式