lua中class的一种实现方式,单例扩充

Posted themeteor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua中class的一种实现方式,单例扩充相关的知识,希望对你有一定的参考价值。

 

先上代码

 

 1 local _class={}
 2  
 3 function class(super,singleton)
 4     local class_type={}
 5     class_type.ctor=false
 6     class_type.super=super
 7     class_type.new=function(...) 
 8             local obj={}
 9             do
10                 local create
11                 create = function(c,...)
12                     if c.super then
13                         create(c.super,...)
14                     end
15                     if c.ctor then
16                         c.ctor(obj,...)
17                     end
18                 end
19  
20                 create(class_type,...)
21             end
22             setmetatable(obj,{ __index=_class[class_type] })
23             return obj
24         end
25     if singleton then
26         class_type.instance = singleton
27         class_type.Instance = function()
28             if class_type.instance==true then                
29                 class_type.instance = class_type.new()
30             end
31             return class_type.instance
32         end
33     end    
34     local vtbl={}
35     _class[class_type]=vtbl
36  
37     setmetatable(class_type,{__newindex=
38         function(t,k,v)
39             vtbl[k]=v
40         end
41     })
42  
43     if super then
44         setmetatable(vtbl,{__index=
45             function(t,k)
46                 local ret=_class[super][k]
47                 vtbl[k]=ret
48                 return ret
49             end
50         })
51     end
52  
53     return class_type
54 end

想在lua项目中添加单例, class的核心部分是借鉴的云风大神的代码,由于实用了newindex元方法对类的赋值进行拦截并将vtbl方法集保存到_class中。所以没法像之前习惯的方式添加class.Instance对类添加方法。所以在class中通过提前定义Instance的方式添加了单例的支持(类似于提前定义的ctor)

添加的过程中仔细看了下这个class这段代码感觉写的真是漂亮。先挖个坑,酝酿回味一下再继续说说我对这个class的理解

以上是关于lua中class的一种实现方式,单例扩充的主要内容,如果未能解决你的问题,请参考以下文章

Java 单例模式探讨

关于python单例的常用几种实现方法

swift实现单例的四种方式

Kotlin 实现单例模式

单例实现方式

常用的几个JQuery代码片段