zoukankan      html  css  js  c++  java
  • 单例模式

    一、为什么要用单例模式? 

      假如有多个用户同时登录,那么在这个时刻,通过计数器取到的在线人数是相同的,于是他们使用各自的计数器加1后存入
    文件或者数据库。这样操作后续登陆的用户得到的在线人数,与实际的在线人数并不一致。所以,把这个计数器设计为一
    个全局对象,所有人都共用同一份数据,就可以避免类似的问题,这就是我们所说的单例模式的其中的一种应用。
      单例模式主要有3个特点:
      1、单例类确保自己只有一个实例。
      2、单例类必须自己创建自己的实例。
      3、单例类必须为其他对象提供唯一的实例。

      下面的代码示例,就是使用单例模式实现计数功能的代码,有问题,欢迎指出。

    二、代码。

    namespace 时间倒数
    {
        public class Sigleton
        {
            private readonly static object obj = new object();
    
            private static Sigleton sig = null;
    
    
            private static Sigleton Sigle
            {
                get
                {
                    if (sig == null)
                    {
                        lock (obj)
                        {
                            if (sig == null)
                            {
                                sig = new Sigleton();
                            }
                        }
                    }
                    return sig;
                }
            }
    
            private static int Count = 1;
    
            public static Sigleton GetSigleton()
            {
                return Sigle;
            }
    
            public int GetCount()
            { 
                return Count++;
            }
        }
    }
    View Code
    namespace 时间倒数.Controllers
    {
        public class HomeController : Controller
        {
            //
            // GET: /Home/
    
            public ActionResult Index()
            {
                var sig=Sigleton.GetSigleton();
                ViewBag.Count = sig.GetCount();
                return View();
            }
    
        }
    }
    @{
        ViewBag.Title = "Index";
    }
    <style>
        .daojishi h2 {
            font-family: Helvetica, Microsoft YaHei, Arial, sans-serif;
            font-size: 14px;
            margin-bottom: 5px;
            color: #151515;
        }
    
        .daojishi #timer {
            font-family: Helvetica, Microsoft YaHei, Arial, sans-serif;
            font-size: 14px;
            color: #151515;
            font-weight: bold;
        }
    </style>
    <body onload="timer()">
        <div class="daojishi">
            <h2>剩余时间为:</h2>
            <div id="timer">
                <span id="days"></span><span></span>
                <span id="hours"></span><span></span>
                <span id="minute"></span><span></span>
                <span id="seconds"></span><span></span>
            </div>
        </div>
        <div>
            <span>访问人数:</span><span>@ViewBag.Count</span>
        </div>
    </body>
    
    <script src="~/Scripts/jquery-1.7.1.min.js"></script>
    <script>
        var nowts;
        //计算相差的月数
        var leave;
        var months;
        //计算出相差天数
        var leave0;
        var days;
        //var days = Math.floor(nowts / (24 * 3600 * 1000));
        //计算出小时数
        var leave1;     //计算天数后剩余的毫秒数
        var hours;
        //计算相差分钟数
        var leave2;         //计算小时数后剩余的毫秒数
        var minutes;
        //计算相差秒数
        var leave3;       //计算分钟数后剩余的毫秒数
        var seconds;
        function timer() {
            nowts = (new Date(2016, 8, 6, 7, 0, 0)) - (new Date()); //计算剩余的毫秒数
            
            showTime(nowts);
            setInterval("nowTimeOver()", 1000);
        }
        function nowTimeOver() {
            nowts = nowts - 1000;
            showTime(nowts);
        }
        function showTime(ts) {
            
            //计算相差的月数
            leave = nowts % (12 * 30 * 24 * 3600 * 1000);
            months = Math.floor(leave / (30 * 24 * 3600 * 1000));
            //计算出相差天数
            leave0 = leave % (31 * 24 * 3600 * 1000);
            days = Math.floor(leave0 / (24 * 3600 * 1000));
            //var days = Math.floor(nowts / (24 * 3600 * 1000));
            //计算出小时数
            leave1 = leave0 % (24 * 3600 * 1000);     //计算天数后剩余的毫秒数
            hours = Math.floor(leave1 / (3600 * 1000));
            //计算相差分钟数
            leave2 = leave1 % (3600 * 1000);         //计算小时数后剩余的毫秒数
            minutes = Math.floor(leave2 / (60 * 1000));
            //计算相差秒数
            leave3 = leave2 % (60 * 1000);       //计算分钟数后剩余的毫秒数
            seconds = Math.round(leave3 / 1000);
            document.getElementById("timer").innerHTML = checkTime(days) + "" + checkTime(hours) + "" + checkTime(minutes) + "" + checkTime(seconds) + "";
            
        }
        function checkTime(i) {
            if (i < 10) {
                i = "0" + i;
            }
            return i;
        }
    
    </script>
    View Code

    三、注意的地方。

      HTML页面里面有倒数计时的功能,这个不用管,是我自己测试时写的。只需要看那个计数即可。单例里面也要注意那个判断是否为空的地方,我也是刚学,以这种双重判断是否为空会比较安全,太深的含义,我还不知道。

  • 相关阅读:
    MongoDB初期学习
    springboot+camunda实现工作流1
    一文带你深入理解位运算
    【林超所长】学科01:熵与热力学重要模型
    PM常用的讨论社区及牛人帖子
    C# 2.0 的特性 总结
    小脚本解决生活问题
    Domain Adaption 之 TCA等算法
    强化学习ddpg算法
    bindkey用法
  • 原文地址:https://www.cnblogs.com/yxzs/p/5707556.html
Copyright © 2011-2022 走看看