zoukankan      html  css  js  c++  java
  • 设计模式实例(Lua)笔记之三(Singleton单例模式)

    1.描写叙述:


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

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

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





    凝视:
        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()


    执行结果,例如以下



  • 相关阅读:
    linux常用命令
    mysql 开发基础系列20 事务控制和锁定语句(上)
    sql server 性能调优之 资源等待 CXPACKET
    mysql 开发基础系列19 触发器
    mysql 开发基础系列18 存储过程和函数(下)
    mysql 开发基础系列17 存储过程和函数(上)
    sql server 性能调优之 资源等待PAGEIOLATCH
    mysql 开发基础系列16 视图
    mysql 开发基础系列15 索引的设计和使用
    sql server 性能调优之 当前用户请求分析 (1)
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6877993.html
Copyright © 2011-2022 走看看