博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lua 简单单例设计模式
阅读量:4953 次
发布时间:2019-06-12

本文共 1400 字,大约阅读时间需要 4 分钟。

单例设计模式是开发过程中使用最为广泛的设计模式之一,比如在一个业务场景下,需要一个管理工具,这个管理工具整个过程只需要一份即可,比如常用的UI管理工具中:窗口window 的管理工具 UIWinMgr  就是一个单例,SoundMgr 整个项目中音效音乐管理工具,ResMgr 资源管理工具等等。

 优点  

一、实例控制  

    单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。  

二、灵活性  

    因为类控制了实例化过程,所以类可以灵活更改实例化过程。  

    缺点  

一、开销  

    虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。  

二、可能的开发混淆  

    使用单例对象(尤其在类库中定义的对象)时,开发人员必须记住自己不能使用new关键字实例化对象。因为可能无法访问库源代码,因此应用程序开发人员可能会意外发现自己无法直接实例化此类。  

三、对象生存期  

    不能解决删除单个对象的问题。在提供内存管理的语言中(例如基于.NET Framework的语言),只有单例类能够导致实例被取消分配,因为它包含对该实例的私有引用。在某些语言中(如 C++),其他类可以删除对象实例,但这样会导致单例类中出现悬浮引用。  

 

第一种实现方式:

Singleton = {}  function Singleton:new(o)      o = o or {}      setmetatable(o,self)      self.__index = self      return o  end    function Singleton:Instance()      if self.instance == nil then          self.instance = self:new()      end      return self.instance  end      s1 = Singleton:Instance()    s2 = Singleton:Instance()    if s1 == s2 then      print("两个对象是相同的实例")  end

 

第二种方式 (在实现类lua 的 class 基础上)

-- 定义名为 UIWinMgr的基础类UIWinMgr= class("UIWinMgr")UIWinMgr.instance = nil -- ctor() 是类的构造函数,在调用 UIWinMgr.new() 创建 UIWinMgr对象实例时会自动执行function UIWinMgr:ctor(Name)    self.Name = Nameendfunction UIWinMgr:getInstance()    if instance == nil then        self.instance = UIWinMgr.new()        self.instance:initData()    end    return self.instanceend function UIWinMgr:initData()    -- do somethingend

 

转载于:https://www.cnblogs.com/Alex1991/p/8708652.html

你可能感兴趣的文章
python中raise抛出异常_Python try except 异常处理介绍
查看>>
ai如何复制文字并对齐_科研论文作图系列从PPT到AI (二)
查看>>
long转时间 unity_Jmeter进阶·时间戳使用技巧汇总
查看>>
matlab norm函数使用_在matlab中使用frestimate函数来进行频率响应分析
查看>>
5g信号频率是多少赫兹_科学家开发了一种比以前更有效地产生太赫兹脉冲的材料系统...
查看>>
mysql搜索结果去重_MySQL性能优化的最佳12条经验
查看>>
sql 凭证明细表 科目余额表_记账明细表应该怎么做?要注意些什么?
查看>>
框架优点_Web前端框架的5个优点,你知道几个?
查看>>
求列表最大值下标_昨晚熬夜整理的Python列表学习笔记,超详细!
查看>>
怎么引jsp包_食品舆情监测:李子柒“刀片”风波引网上热议
查看>>
登录非空验证_详解iVX中用户组件注册登录功能
查看>>
51单片机按键pwm调光_51单片机LCD液晶屏按键电子时钟的设计
查看>>
python后台研发工程师面试题_Python后端工程师面试题(附答案)终结版
查看>>
花滑三周连跳_花滑女单进入四周跳时代? 央视:水道渠成 指日可待
查看>>
mysql 返回id_mysql返回自增id
查看>>
java mysql创建数据库连接池_Java实现数据库连接池简易教程
查看>>
tomcat+mysql+腾讯云_腾讯云服务器配置tomcat和mysql
查看>>
aws sql mysql_AWS 数据库(七)
查看>>
mac 安装mysql 5.1_mac安装mysql-python==1.2.5的问题
查看>>
php mysql.sock_mysql启动错误mysql.sock
查看>>