zoukankan      html  css  js  c++  java
  • 设计模式漫谈之单例模式

    还是看代码能让我静下心来。我现在语言表达能力严重下降,又不自信。fuck,不想了,我还是我,世上独一无二的我。走自己的路,让别人看吧。马上4月了,天也变热了!

    闲话少扯,今天说单例模式,就算22种模式都不知道,也应该知道单例模式,这个在实际项目中用的比较多。

    一个应用是一个进程,在内存中分配一定的空间。如果想让某个实例在这个空间中独一无二,就需要用单例模式即栈中的地址和堆中的数据是同一个。

    创建模式意思就是创建对象的方法。

    算了,直接上例子吧,我来解释例子。网上说单例模式有很多种写法,现在只说比较经典的模式吧。

    class Singleton
    {

    //静态对象的生存期比较长,直到进程结束,空间释放。
    private static Singleton instance;

    //一个托管堆得地址
    private static readonly object syncRoot = new object();

    //如果一个类的构造函数是私有的,那外界就没法New 这个对象(只要有显式构造函数,就会隐藏掉默认的构造函数【默认静态构造函数除外】)
    private Singleton()
    {
    }

    //这种写法叫做双重锁

    public static Singleton GetInstance()
    {
    if (instance == null)
    {

    //多线程访问的时候,排队,如果没有锁每一处的代码都有可能多个线程同时访问到。

    lock (syncRoot)
    {

    //再次判断,避免重复创建对象

    if (instance == null)
    {
    instance = new Singleton();//外界无法New 但是本类中是可以new的
    }
    }
    }
    return instance;//返回的就是内存中独一无二的静态那个实例。
    }

    }

    总结:这个单例模式还是比较简单的。要明白生存周期,指时间上的概念,作用域是空间上的概念。

  • 相关阅读:
    JUnit5依赖注入与测试接口
    Python如何设计面向对象的类(下)
    JUnit5参数化测试的几种方式
    JUnit5的条件测试、嵌套测试、重复测试
    熬夜肝了一份 C++/Linux 开发学习路线
    适合普通大学生的 Java 后端开发学习路线
    二本,拿腾讯,阿里 offer 了
    适合普通大学生的前端学习路线
    41道计算机网络高频面试题(附带答案)
    在Rancher中修改K8S服务参数的万金油法则
  • 原文地址:https://www.cnblogs.com/wang-charle/p/8666470.html
Copyright © 2011-2022 走看看