Lua 简单单例设计模式

单例设计模式是开发过程中使用最为广泛的设计模式之一,比如在一个业务场景下,需要一个管理工具,这个管理工具整个过程只需要一份即可,比如常用的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 = Name
end

function UIWinMgr:getInstance()
    if instance == nil then
        self.instance = UIWinMgr.new()
        self.instance:initData()
    end
    return self.instance
end 

function UIWinMgr:initData()
    -- do something
end

原文地址:https://www.cnblogs.com/Alex1991/p/8708652.html

时间: 2024-10-08 10:03:55

Lua 简单单例设计模式的相关文章

OC学习-单例设计模式的理解、案例和简单总结

单例模式,就是一个类始终只有一个实例,不管如果copy还是retain还是alloc等等,都只有一个实例.为什么?有什么好处? 简单来说: a:有的东西只能有一个,那就必须用单例: b:单例的好处就是不会有多余的实例,所以节约内存: c:因为只有一个单例,所以易于管理多线程对它的访问. d:其他的原因……省略 我们创建一个单例的User类,然后生成一个user1对象,再把这个对象进行copy.retain这些,再看看它们是否是同一个实例,还是被创建出多个实例? (1)User.h view so

【OC学习-29】单例设计模式的理解、案例和简单总结

单例模式,就是一个类始终只有一个实例,不管如果copy还是retain还是alloc等等,都只有一个实例.为什么?有什么好处? 简单来说: a:有的东西只能有一个,那就必须用单例: b:单例的好处就是不会有多余的实例,所以节约内存: c:因为只有一个单例,所以易于管理多线程对它的访问. d:其他的原因--省略 我们创建一个单例的User类,然后生成一个user1对象,再把这个对象进行copy.retain这些,再看看它们是否是同一个实例,还是被创建出多个实例? (1)User.h #import

深入谈谈Java最简单的单例设计模式

单例设计模式是23种设计模式里面最简单的,但是要彻底理解单例,还是需要下一点功夫的. 单例一般会分为饿汉模式和懒汉模式 饿汉模式: 1 public class Singleton 2 { 3 private static Singleton singleton = new Singleton(); 4 5 public static Singleton getInstance() 6 { 7 return singleton; 8 } 9 } 但是在一些系统应用环境中,这个单例对象可能比较大,

设计模式之单例设计模式

一.何为单例设计模式 单例模式,顾名思义就是单个实例,程序中某个类只有一个实例存在.通常实在需要共享某个资源避免资源损耗的情况下使用到的. 二.单例设计模式的代码实现 一说到单例模式的概念,我们首先会想到下面的这种的写法 public class SingleInstance { private static SingleInstance singleInstance; /** * 单例模式 * @return */ public static SingleInstance getSingleI

微信 使用单例设计模式 提供AccessToken 和Jsapi_ticket缓存支持

上一篇 是使用ecache 做的缓存, 有些简单的微信项目并不需要这么复杂,So就想到单例设计模式  首先,我们先定义一个单例对象 import java.util.HashMap; import java.util.Map; /**  *   * @author wangiegie  * @date 2015年9月29日下午8:13:06  * @description  */ public class Singleton { //缓存accessToken 的Map  ,map中包含 一个a

设计模式总纲——单例设计模式

前两天写了设计模式总纲,今天就来讲讲我们在工程代码中最最最常用的设计模式了——单例设计模式,这个模式在工程代码上的出现率几乎为99.99999%,但是虽然很常用,但是用的好的人却不多,今天我们就来深入的说一说单例设计模式. 在学习一项新的知识之前,我们都要向自己提出三个问题,为什么要用这个知识,这个知识用在哪里,这个知识怎么用?既 why,where,how,3W模式,我们先来谈谈为什么需要单例设计模式,先来想想,如果一个工具类,比如一个读取配置文件的工具类,这类工具只是特定的功能类,既读取指定

JAVA_SE基础——37.单例设计模式

本文继续介绍23种设计模式系列之单例模式. 我们在javaSE的基础学习中,会讲到:单例设计模式.模板设计模式.装饰者设计模式.观察者设计模式.工厂设计模式 我以后随着水平的提高,我会专门开个分类写设计模式的.现在请原谅我的知识面有限-- 设计模式→中的    "模式" 二字是什么意思.. 模式:模式就是解决 一类 问题的固定步骤 . 模式的概念最早起源于建筑行业.... 建房子的步骤都是一样子: 打地基-----> 浇柱子------->盖楼面--------->砌

黑马程序员--Java基础学习笔记【单例设计模式、网络编程、反射】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 设计模式分类: 创建模式:是对类的实例化过程的抽象化,又分为类创建模式和对象创建模式 类创建模式:工厂方法模式 对象-:简单工厂(静态工厂方法)模式.抽象工厂模式.单例模式.建造模式- 结构模式:描述如何将类或者对象结合在一起形成更大的结构 适配器模式.缺省模式.合成模式.装饰模式(包装模式).门面模式- 行为模式:对不同的对象之间划分责任和算法的抽象化 不变模式.策略模式.迭代子模式.命令模

java设计模式_single(单例设计模式)

设计模式:解决某一类问题最行之有效的方法,java中有23种设计模式 一.单例设计模式概述: 1.解决一个类在内存中只有一个对象(保证一个类仅有一个实例,并提供一个访问他的全局访问点)  2.要保证对象的唯一: 1.为了避免其他程序过多的建立该类对象,先禁制其他程序建立该类对象 2.为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象 3.为了 方便其他程序对自定义对象的访问,可以对外提供一些访问方式 3.代码实现步骤: 1.将构造函数私有化 2.在类中创建一个本类对象 3.给外部提供