• java设计模式--单例模式


    1,定义:一个类只有一个实例,且该类能自行创建这个实例的模式,

    2,特点:只有一个实例对象,单例对象有单例类自行创建、对外提供一个访问该单例的全局访问点

    3,结构

      单例类的主要角色

        单例类:包含一个实例且能自行创建这个实例的类

        访问类:使用单例的类

     4,懒汉单例

      类加载的时候没有单例,只有当第一次调用getInstance的时候才会创建这个实例

    public class LazySingleton{
      //保证线程同步
       private static volatile LazySingleton instance=null;
      //避免在外部被实例化 
      private LazySingleTon(){};
      public static synchronized LazySingleton getInstance(){
        if(instance==null){
            instance = new LazySingleton();  
        }
        return instance;
      }
          
    }

    使用volatile和synchronized保持同步,缺点是会影响性能

    5,饿汉单例

      特点是类一旦加载就创建一个单例,保证在调用getInstance方法之前单例就已经存在了

    public class HungrySingleton{
      private static final HungrySingleton instance = new HungrySingleton();
      private HungrySingleton(){}
      public static HungrySingleton getInstance(){
         return instance;  
      }
    }

     该模式在类创建的同时,就已经创建好一个静态的对象供系统使用,以后不再改变,所以是线程安全的,可以直接用于多线程

    6,应用场景

      某类只要求生成一个对象的时候

      对象需要被共享的时候,使用单例可以节省内存,加快访问速度,如数据库连接池

      当某类需要频繁实例化,而创建的对象又频繁被销毁的时候,如线程池,网络连接池

    7,扩展

      单例模式可扩展为有限的多例模式(Multito),这种模式可生成有限个实例并保存在list中,客户需要时,可随机获取,结构图如下

  • 相关阅读:
    transition过渡效果
    transform旋转变换效果
    让字体在div容器中垂直居中
    背景图片浮动居中
    解决图片浮动调节不了的问题(使用vertical-align属性)
    box-shadow向元素添加阴影效果
    hr中间插入字体
    codeforces 659D . Bicycle Race 几何
    codeforces 659E . New Reform 强连通
    codeforces 552 E. Vanya and Brackets 表达式求值
  • 原文地址:https://www.cnblogs.com/javadongx/p/singleton_danlimoshi.html
Copyright © 2020-2023  润新知