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

    单例模式

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

    就种数来说常用的有两种:懒汉模式和饿汉模式。 

    饿汉模式:

    //饿汉模式不安全
    public class Cat {
        private static Cat cat = new Cat();
    
        private Cat(){
        }
        public static Cat newInstance(){
            return cat;
        }
    
    }

    增强版饿汉模式:

    public class Boss {
        // 1. 私有化构造器
        private Boss {}
    
        // 2. 定义实例的变量
        private static Boss instance;
    
        // 3. 通过静态方法创建或返回实例
        public static Boss getInstance () {
            if (instance == null) {
                instance = new Boss();  // 虽然构造器是私有的,但是可以在内部调用
            }
            return instance;
        }
    }

    双重检查锁版:

    // 1. 将构造器私有化
    private Boss() {}
    
    // 2. 初始化一个静态变量
    private static volatile Boss instance = null;
    
    // 3. 构造一个静态方法,通过它初始化或返还对象
    public static Boss getInstance() {
        // 双重检查锁机制
        if (instance == null) {
            synchronized (Boss.class) {
                if (instance == null) {
                    instance = new Boss();
                }
            }
        }
        return instance;
    }

    其中:

    • synchronized 块尽量缩小了锁定的范围,提高效率
    • volatile 是为防止编译器指令重排而导致双重检查锁失效

    懒汉模式:

    public class Dog {  
        private static Dog dog ;  
        private Dog (){}  
        public static synchronized Dog newInstance() {  
        if (dog == null) {  
            dog = new Dog ();  
        }  
        return dog ;  
        }  
    }  
  • 相关阅读:
    lamp环境安装二
    ubuntu14.04 sublime 出错
    lamp环境安装一
    jsp(Java Server Pages)和js(JavaScript)的区别:
    form表单验证jquery
    数据库分离 脱机
    数据绑定ds.ReadXml(stream);
    自定义类型转化
    temp
    一般处理程序获得一个链接返回的值
  • 原文地址:https://www.cnblogs.com/ljj5/p/9476995.html
Copyright © 2011-2022 走看看