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
    

      

  • 相关阅读:
    龙小树|第一篇博客随笔
    机器学习相关网址
    希腊字母表
    博客园美化
    论文检索常用网站
    这些年,我用过的良心网站,分享给大家
    MATLAB小函数:展示灰度图像数据集的部分样例
    基于图嵌入的高斯混合变分自编码器的深度聚类(Deep Clustering by Gaussian Mixture Variational Autoencoders with Graph Embedding, DGG)
    MATLAB实例:二维散点图
    MATLAB实例:多元函数拟合(线性与非线性)
  • 原文地址:https://www.cnblogs.com/zyx110/p/10663002.html
Copyright © 2011-2022 走看看