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 ;  
        }  
    }  
  • 相关阅读:
    PHP模拟 URL Rewrite
    FCKeditor在smarty中的使用一例
    PHP网站开发遇到的中文编码
    浪子的心情叶启田
    URL Rewrite 写在.htaccess和httpd.conf中,对php的$_SERVER变量的影响
    PHP模拟实现url rewrite
    smarty的简单分页
    PHP与WEB服务工作的三种方式
    smarty内部日期函数html_select_date()
    php读取文件:PHP读取COOKIES的实现方法
  • 原文地址:https://www.cnblogs.com/ljj5/p/9476995.html
Copyright © 2011-2022 走看看