• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

设计模式实例(Lua)笔记之三(Singleton单例模式)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请


 这个模式是非常有意思,并且比較简单,可是我还是要说由于它使用的是如此的广泛,如此的有人缘,单例就是单一、独苗的意思,那什么是独一份呢?

你的思维是独一份,除此之外还有什么不能山寨的呢?

我们举个比較难复制的对象:皇帝。
    中国的历史上非常少出现两个皇帝并存的时期,是有,但不多,那我们就觉得皇帝是个单例模式,在这个场景中,有皇帝,有大臣,大臣是天天要上朝參见皇帝的,今天參拜的皇帝应该和昨天、前天的一样(过渡期的不考虑,别找茬哦),大臣磕完头,抬头一看,嗨,还是昨天那个皇帝,单例模式,绝对的单例模式,先看类图: 





凝视:
    main()。大臣
    CEmperor。须要单例的类

    说明:非常多大臣拜见的皇帝,仅仅有一个。

体如今面向对象方面,CEmperor定义一个静态指针,和一个静态函数,私有化构造函数、析构函数、构造函数复制、重载赋值语句。



    注意:线程安全,採用相互排斥体的方式实现。


2. 代码:

Emperor = {}
function Emperor:new(o)
    o = o or {}
    setmetatable(o,self)
    self.__index = self
    return o
end

function Emperor:GetInstance()
    if self.m_pEmperor == nil then
        self.m_pEmperor = self:new()
    end

    return self.m_pEmperor
end

function Emperor:ReleaseInstance()
	if self.m_pEmperor then
		self.m_pEmperor = nil
	end
end

function Emperor:EmperorInfo()
	print("皇帝某年某日", os.date("%X", os.time()))
end

--- main ---
function main()
	pEmperor1 = Emperor:GetInstance()
	pEmperor1:EmperorInfo()

	pEmperor2 = Emperor:GetInstance()
	pEmperor2:EmperorInfo()

	if pEmperor1 == pEmperor2 then
		print("大家都是天天要上朝參见同个皇帝!

") end end main()


执行结果,例如以下




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
nginx+lua学习发布时间:2022-07-22
下一篇:
lua注释发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap