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

    单例模式,顾名思义,确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式,是所有模式中最简单的,也是最常用的软件模式之一。不管是在我们的实际的软件开发过程中,还是找工作面试的时候,经常会用到。进行客户端开发,经常会用到一些启动参数,例如服务器的ip,端口,用户名,session之类的,需要在整过项目中经常用到,所以在这种情况下,我会把用单例模式来解决这个问题。简单看一下代码:

     1 public class AppStartupParam
     2     {
     3         private AppStartupParam() { }
     4 
     5         private static AppStartupParam instance = null;
     6         private static readonly object locker = new object();
     7 
     8         public static AppStartupParam Instance
     9         {
    10             get
    11             {
    12                 if (instance == null)
    13                 {
    14                     lock(locker)
    15                     {
    16                         if (instance == null)
    17                         {
    18                             instance = new AppStartupParam();
    19                         }                        
    20                     }
    21                 }
    22 
    23                 return instance;
    24             }
    25         }
    26 
    27         public string ServerIP { get; set; }
    28 
    29         public int ServerPort { get; set; }
    30 
    31         public string UserName { get; set; }
    32 
    33         public string Session { get; set; }
    34     }

    上面的代码很简单,是单例模式的一种实现方法,叫饿汉双校验锁式单例模式,值得注意的地方有两个地方:

    1.一个类若是只能创建一次,必须用一个私有的构造器来取代默认公共的构造器,从而使该类不能随意创建实例,我一开始用的时候经常把这个私有构造函数漏掉,虽然不影响实际使用,但是没有私有构造函数,就称不上是单例模式。

    2.在第一次检查instance是否为null,如果为null,则进入同步锁,再次判断instance是否为null,如果为null,则创建实例。加锁是考虑到多线程同步的问题,第一次检查实例是因为绝大数情况下,只需要同步锁外面判断一下就可以了,提高了系统的性能,缩短耗时。

    简单总结一下,单例模式的优点,缺点,使用场景:

    优点:

    1.减少内存开支,特别需要频繁创建,销毁对象时,优势明显
    2.减少性能开销
    3.避免对资源的多重占用,如读写文件
    4.设置全局的访问点,优化和共享资源访问

    缺点:

    1.一般没有接口,拓展困难
    2.与单一职责原则冲突

    使用场景:

    1.要求生成唯一序列化的环境
    2.整个项目中需要一个共享访问点或共享数据
    3.创建一个对象需要消耗的资源过多,如访问IO或数据库等资源
    4.定义大量的静态常量和静态方法,如工具类

  • 相关阅读:
    boost 1.49在vs 2005下编译的方法
    Mathematics for Computer Graphics
    字符串和字符数组长度
    四个月的学习心得
    话说stm32f10x-FSMC的配置与频率
    一些笔试题,大家都来围观呀~
    简单的生产者消费者-(windows下)
    STM32f10x下软件模拟IIc读写si5326问题
    usb枚举阶段(转载)
    STM32 GPIOB_PIN3复用功能小分析
  • 原文地址:https://www.cnblogs.com/Johar/p/9030752.html
Copyright © 2011-2022 走看看