zoukankan      html  css  js  c++  java
  • 单例设计模式(详解)

    单例设计模式

    模式:模式就是解决一类问题的固定步骤

    单例设计模式:保证一个类在内存中只有一个对象

    举例:多个浏览器向服务器发送请求,只创建一个servlet对象处理相应的请求,而不是每接收一个请求,就创建一个servlet对象

    1.饿汉单例设计模式

              1.私有化构造函数

              2.声明本类的引用类型变量,并且使用该变量指向本类对象

              3.提供一个公共静态的方法获取本类的对象

    //保证Single在内存中只有一个对象
    public class Single {
        //私有化构造函数
        private Single(){
    
        }
         //声明本类的引用类型变量,并且使用该变量指向本类对象
        private static Single single = new Single();
        //提供一个公共的方法获取本类的对象
        public static Single getInstance(){
            return single;
        }
    }
    
    class Test{
        public static void main(String[] args) {
    
            Single s1 = Single.getInstance();
            Single s2 = Single.getInstance();
            boolean flag = s1.equals(s2);
            System.out.println("是同一个对象吗?"+flag);
        }
    }
    

      

    运行结果:
    
    是同一个对象吗?true
    

      

    2.懒汉单例设计模式

             1.私有化构造函数

             2.声明本类的引用类型变量,但不要创建对象

             3.提供静态公共的方法获取本类的对象,获取之前先判断是否已经创建了本类对象,如果已经创建了,那么直接返回对象即可,如果还没创建,那么先创建本类的对象,然后再返回。

    //保证Single在内存中只有一个对象
    public class Single {
        //私有化构造函数
        private Single(){
    
        }
         //声明本类的引用类型变量,
        private static Single single ;
        //提供一个公共的方法获取本类的对象
        public static Single getInstance(){
            if(single == null){//判断对象是否创建
                single = new Single();
            }
            return single;
        }
    }
    
    class Test{
        public static void main(String[] args) {
    
            Single s1 = Single.getInstance();
            Single s2 = Single.getInstance();
            boolean flag = s1.equals(s2);
            System.out.println("是同一个对象吗?"+flag);
        }
    }
    

      

    运行结果:
    
    是同一个对象吗?true
    

      

  • 相关阅读:
    【机器学习】关于判别模型和生成模型
    Delphi新手跟我学写CALL,附完整原程序
    QT事件研究的文章
    杂烩:QWidget、QGraphics、QtQuick
    Golang全接触
    学会使用git
    代码创建 WPF 旋转动画
    值得推荐的C/C++框架和库 very good
    可恶的QT隐式共享
    Notes on OpenSSL and Qt(ssl.pri,qsslocket_openssl_symbols.cpp)
  • 原文地址:https://www.cnblogs.com/zyx110/p/10663002.html
Copyright © 2011-2022 走看看