[设计]单例模式

来源:互联网 发布:zarchiver解压数据错误 编辑:程序博客网 时间:2024/06/05 19:07

[设计]单例模式

场景

  • 话说还是雷达客户端与服务交互,这个交互对象就是全局唯一的吧,不论什么时候什么地方请求这个交互对象肯定只能是一个,不然那交互不就乱套了吗?

简单的说就像我们的习大大,全中国只有一个不论你从电视上看还是从网络上还是真人还是文字只能只是一个

解决办法

  • 肯定是静态方法返回啊,谁都可以调都返回同一个不就行了吗?
  • 肯定要中,只能有一个地方实例化啊,这就是说不能让调用者实例化啊,如果调用者实例化你能管住他实例化几个吗?
  • 肯定要考虑多线程啊,多个线程同时请求实例化不一样还是多个吗?

  • 这次代码很简单,思想也不少

  class SingleCase    {        private static SingleCase singleObject;        private static readonly object locker = new object();        private SingleCase()        {        }        public static SingleCase GetSingle()        {            if (null == singleObject)            {                lock (locker)                {                    singleObject = new SingleCase();                }            }            return singleObject;        }    }

注意

  1. 只说对象是静态的,构造是私有的,这样就能保就能保证除了自己没有别人可以让自己产生对象了。
  2. 加锁只是为了防止两个线程同时访问,有人说你可能吗?我只好返回你清楚并发和并行的概念吗?
  3. 加锁又加判断是为了效率,锁这完意毕竟是要强制排队的,那效果肯定不好啊,但是不论排队与否目的只是取对象,我拿到不就行了吗?
  4. 今天看同事的代码还看到一个foreach一个集合提示在其它地方做了更改,想想肯定是线程没有处理好了,所以说线程也是考虑的重点地方。
    源码
    原文地址

不论困难与容易坚持下来才是正确的选择

原创粉丝点击