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()


    执行结果,例如以下



  • 相关阅读:
    共用体
    位运算符和位运算
    python中while循环
    c语言中求多个整数的和及其平均值
    c语言中switch语句
    python中删除列表中多次重复的元素
    python中while循环
    python中break语句
    使用用户输入来填充字典
    python中while循环使用标志
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6877993.html
Copyright © 2011-2022 走看看