美文网首页
术-机制:单例类的打开def obj.meth与class <<

术-机制:单例类的打开def obj.meth与class <<

作者: 稻草人_b788 | 来源:发表于2019-10-03 07:34 被阅读0次

一、打开单例类的方法

在ruby中打开单例类有两种方法:
一种是def obj.meth的形式,另一种是class << obj; def meth的形式。

二、两种打开单例类的方法的区别

通常情况下,两种并没有什么区别。
唯一一个不同点在于:常量解析的方式
如果有一个顶层的常量N,同时也定义一个N在对象的单例类中:

N = 1 #顶层的常量N
obj = Object.new
class << obj #打开obj对象的单例类
    N = 2 #obj对象的单例类中的常量N
    def show_N
      puts N
    end
end

def obj.show_N_another_way
    puts N
end

运行代码后,结果为:

obj.show_N #结果为2

obj.show_N_another_way  #结果为1

这个区别在常量可见性对代码的影响上比较少见,在大多数的情况下,这两种单例方法定义的方式是可相互替换的。但是了解它们的不同是值得的,可用于解释一些出乎意料的结果。

三、建议

1.如果没有那么多方法要添加到单例类中,可以使用简短的def obj.meth形式来打开单例类并构建单例方法。
2.如果有很多方法要加入到单例类,或者需要在单例类中加入模块,那么class << obj; def meth的形式更为灵活和美观。

四、参考资料

1.《Ruby程序员修炼之道(第2版)》[美] David A. Black--第13章1节(直接检查和修改单例类)

相关文章

  • 术-机制:单例类的打开def obj.meth与class <<

    一、打开单例类的方法 在ruby中打开单例类有两种方法:一种是def obj.meth的形式,另一种是class ...

  • 12.Python中的设计模式

    1.单例模式 class Dog(object): __instance=None def __new__(c...

  • Swift单例

    class LoginHandler :NSObject{获取单例的类方法class func sharedIns...

  • 单例

    //单例 // Swift 1.2后,可以使用类变量 // Swift 1.2之前单例的写法 /* class M...

  • 手写单例模式(饿汉和饱汉模式)和工厂模式

    (1)单例饿汉模式://饿汉式单例类.在类初始化时,已经自行实例化 public class Singleton1...

  • Kotlin-单例类

    1、单例模式:设计模式之一,可以避免创建重复的对象。 2、单例模式工作机制Java写法: public class...

  • 第一篇:单例模式

    单例模式即一个类只拥有一个实例。 单例模式一 class MyClass{ private: MyClass(){...

  • Python单例

    Python单例 一般单例,利用内置函数def __new__(cls, *args, **kwargs)实现单例...

  • 【架构设计】关于封装的思考

    看下面的一个单例类:public class AppCache {private AppCache() {} } ...

  • 单例模式

    一、定义与特点 单例模式的特点 单例类只有一个实例对象 该单例对象必须由单例类自行创建 单例类对外提供一个访问该单...

网友评论

      本文标题:术-机制:单例类的打开def obj.meth与class <<

      本文链接:https://www.haomeiwen.com/subject/osxxyctx.html