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

    单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。

    实现过程:

    将构造方法私有化,使其不能new出来

    在这个类的内部产生唯一一个实例化对象,将其new出来,用static private 修饰

    创建静态方法,返回实例对象

    1)饿汉式

     1 public class Singleton {
     2 
     3     // 将自身实例化对象设置为一个属性,并用static、final修饰
     4     private static final Singleton instance = new Singleton();
     5     
     6     // 构造方法私有化
     7     private Singleton() {}
     8     
     9     // 静态方法返回该实例
    10     public static Singleton getInstance() {
    11         return instance;
    12     }
    13 }

    优点:实现简单,没有多线程问题

    缺点:当类SingletonTest被加载的时候,会初始化static的instance,静态变量被创建并分配内存空间,从这以后,这个static的instance对象便一直占着这段内存(即便你还没有用到这个实例),当类被卸载时,静态变量被摧毁,并释放所占有的内存,因此在某些特定条件下会耗费内存。

    public class Singleton {
    
        // 将自身实例化对象设置为一个属性,并用static修饰
        private static Singleton instance;
        
        // 构造方法私有化
        private Singleton() {}
        
        // 静态方法返回该实例
        public static Singleton getInstance() {
            if(instance == null) {
                instance = new Singleton();
            }
            return instance;
        }
    }

    优点:实现起来比较简单,当类SingletonTest被加载的时候,静态变量static的instance未被创建并分配内存空间,当getInstance方法第一次被调用时,初始化instance变量,并分配内存,因此在某些特定条件下会节约了内存。

    缺点:不支持多线程

    线程安全的懒汉模式:

    public class Singleton {
    
        // 将自身实例化对象设置为一个属性,并用static修饰
        private static Singleton instance;
        
        // 构造方法私有化
        private Singleton() {}
        
        // 静态方法返回该实例,加synchronized关键字实现同步
        public static synchronized Singleton getInstance() {
            if(instance == null) {
                instance = new Singleton();
            }
            return instance;
        }
    }
  • 相关阅读:
    4种定位的区别
    tab切换插件
    CPU的cache知识
    linux free命令详解
    关于登录linux时,/etc/profile、~/.bash_profile等几个文件的执行过程
    职业规范(运维)
    数据库的横表和纵表
    Linux下的xargs的用法
    LINUX ulimit命令
    防火墙并发连接数
  • 原文地址:https://www.cnblogs.com/tilyougogannbare666/p/13132270.html
Copyright © 2011-2022 走看看