zoukankan      html  css  js  c++  java
  • JAVA的设计模式之单例设计模式

    1、确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。

    1)理论

    Java Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection)。

    使用单例模式最核心的一点是体现了面向对象封装特性中的“单一职责”和“对象自治”原则。很多时候我们要保证类的实例只有一个。我们可能在自己的代码中判断需要的类的实例有无,无就new一个。这样看似不错。

    问题是,你用到这个类的地方有n个,这样你就需要n个判断。为什么不把这个职责交给类本身呢?然后让类提供一个接口访问。

    2)作用

    单例模式,能避免实例重复创建;

    单例模式,应用于避免存在多个实例引起程序逻辑错误的场合;

    单例模式,较节约内存。

    2、单列模式(Singleton)的三种方式(其实还有枚举等)

    懒汉式单例类
    对于懒汉模式,我们可以这样理解:该单例类非常懒,只有在自身需要的时候才会行动,从来不知道及早做好准备。它在需要对象的时候,才判断是否已有对象,如果没有就立即创建一个对象,然后返回,如果已有对象就不再创建,立即返回。
    懒汉模式只在外部对象第一次请求实例的时候才去创建

    /**
     * 懒汉式
     */
    public class Demo_Layz {
        // 提供私有的访问方式
        private Demo_Layz() {
        }

        // 只创建成员变量不赋值
        private static Demo_Layz dl = null;
        
        //public static final Demo_Laz dl=new Demo_Layz();这是一个牛逼的方法!如果满分100,他就是120!

        public static Demo_Layz getInstance() {
            if (dl == null) {         //提高效率
                synchronized (Demo_Layz.class) {//保证对象的唯一性

                    if (dl == null) {
                        dl = new Demo_Layz();
                    }
                }
            }

            return dl;

        }

    }

    饿汉式单例
    对于饿汉模式,我们可以这样理解:该单例类非常饿,迫切需要吃东西,所以它在类加载的时候就立即创建对象。
    /**
     * 饿汉式单列模式(一般我们使用单列模式一般都建议使用饿汉模式)
     */
    public class A3 {
          private A3(){}    
        
         private  static A3 a=new A3();
        
         public  static A3 getIntance(){
            
             return a;
            
         }
        
    }
    /**
     * 单列模式的第三种模式
     */
    public class A {

         private A(){}
        
        // 简单粗暴
        public static final A a =new A();
    }

  • 相关阅读:
    Java知识汇总第二天
    jvm学习笔记
    java知识汇总的第一天
    全链路压测流量模型
    FunTester测试框架Redis性能测试实践
    FunTester抄代码之路
    Jira API的踩坑记
    把工作讲给家人听
    颇具年代感的《JMeter中文操作手册》
    FunTester框架Redis压测预备
  • 原文地址:https://www.cnblogs.com/taotingkai/p/6259932.html
Copyright © 2011-2022 走看看