Lua的简单单例和基于框架的单例类实现

这篇博客介绍了如何在Lua中创建一个单例类。通过两种不同的实现方式展示了单例模式,确保同一类只能有一个实例存在。第一种是基础的Singleton类,第二种是在Lua框架下实现的单例类,包含初始化、获取实例和删除实例的方法。这些实现有助于在项目中管理和控制类的实例化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Singleton = {}
function Singleton:new(o)
    o = o or {}
    setmetatable(o,self)
    self.__index = self
    return o
end
function Singleton:GetInstance()
    if self.instance == nil then
        self.instance = self:new()
    end
    return self.instance
end
s1 = Singleton:GetInstance()
s2 = Singleton:GetInstance()

基于自己的Lua框架的单例类:

--[[
-- 单例类
]]
---@class Singleton
local Singleton = BaseClass("Singleton")

local function __init(self)
    assert(rawget(self._class_type, "Instance") == nil, self._class_type.__cname .. " to create singleton twice!")
    rawset(self._class_type, "Instance", self)
end

local function __delete(self)
    rawset(self._class_type, "Instance", nil)
end

-- 只是用于启动模块
local function Startup(self)
end

-- 不要重写
local function GetInstance(self)
    if rawget(self, "Instance") == nil then
        rawset(self, "Instance", self.New())
    end
    assert(self.Instance ~= nil)
    return self.Instance
end

-- 不要重写
local function Delete(self)
    self.Instance = nil
end

Singleton.__init = __init
Singleton.__delete = __delete
Singleton.Startup = Startup
Singleton.GetInstance = GetInstance
Singleton.Delete= Delete

return Singleton

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值