zoukankan      html  css  js  c++  java
  • 保证一个类仅有一个实例:单例模式

    场景:微软的windows xp操作系统,ctrl+alt+del键都会弹出一个windows任务管理器(这时不关闭这个任务管理器),继续ctrl+alt+del键还是一个windows任务管理器。鉴于本人水平有限,上面的场景举例可能不合适,但是很接近一个基本的设计模式:单例模式。Code is cheap.下面用c#代码模拟出一个类似任务管理器的创建:

    Code
    上面创建实例的基本思想是new一个对象的时候,判断静态的类变量是否已经有实例,构造函数私有,这样外部代码不能直接new来实例化对象。这是因为我们都知道所有类都有构造函数,不编码写构造函数则系统默认生成无参数的构造方法,但如果有显式定义的构造方法,默认的就会失效。ps:在定义可序列化的类的时候,默认构造函数是必须的,所以如果你显式定义了一个带参数的构造方法,一定不能忘记要再写一个没有参数的构造方法。
    好了,上面的代码ms已经简单的实现了对唯一实例的受控访问。不过在多线程的程序中,上面的代码会有可能创建多个实例的。给进程加把锁,用lock解决一下:
    Code
    上面那种做法可以创建单一实例,可是每次调用创建方法时,都要lock,影响性能,有一种双重锁定的方法:
    Code
    最后再看一个所谓的饿汉式单例类:
    Code


    作者:Jeff Wong
    出处:http://jeffwongishandsome.cnblogs.com/
    本文版权归作者和博客园共有,欢迎围观转载。转载时请您务必在文章明显位置给出原文链接,谢谢您的合作。

  • 相关阅读:
    使用jetty部署配置solr服务
    solr 与 MySQL(二)
    学习solr(一)
    FormData 上传文件
    node.js cannot find module 'mysql'
    select2 ajax 无法选中
    jenkins持续集成文件冲突的问题
    Inno Setup 实现每次jenkins自动构建时版本号自动+1
    jenkins 配置slave节点(win10系统)
    Jenkins+Gradle实现android开发持续集成和打包
  • 原文地址:https://www.cnblogs.com/jeffwongishandsome/p/1411570.html
Copyright © 2011-2022 走看看