zoukankan      html  css  js  c++  java
  • 单例模式(singleton)java实现

    //20210117
    写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现单例模式

    单例模式概念:

    • 私有化构造器,让一个类只能拥有一个实例化对象,并创建静态方法用以获取该对象

    饿汉式

    • 无论是否调用,都先自己创建对象
    • 源代码如下:
    /**
     * hunger man mode
     */
    public class HungerSingleton {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        private static volatile HungerSingleton hungerSingleton;
    
        private HungerSingleton(){}
    
        public static HungerSingleton newInstance(){
    
            return hungerSingleton;
        }
    }
    
    

    懒汉式

    • 只有在请求的时候才创建对象
    • 程序源代码如下:
    /**
     * lazy man mode
     */
    public class LazySingleton {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        private static volatile LazySingleton lazySingleton;
    
        private LazySingleton(){}
    
        public static LazySingleton newInstance(){
            if(lazySingleton==null){
                lazySingleton = new LazySingleton();
            }
            return lazySingleton;
        }
    }
    
    

    双重加锁式

    • 该模式是饿汉式的线程安全版
    • 程序源代码如下:
    public class Singleton_Double_Check {
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        private static volatile Singleton_Double_Check singletonDoubleCheck;
        private final static Object lock_ = new Object();
        //私有化构造器
        private Singleton_Double_Check(){
    
        }
    
        public static Singleton_Double_Check newInstance(){
            if(singletonDoubleCheck ==null){
                synchronized (lock_){
                    if(singletonDoubleCheck ==null){
                        singletonDoubleCheck = new Singleton_Double_Check();
                    }
                    return singletonDoubleCheck;
                }
            }
            return singletonDoubleCheck;
        }
    }
    
    

    以上
    希望对大家有所帮助

  • 相关阅读:
    索引访问中的access和filter
    分页SQL走全表扫描导致TEMP耗尽
    多表关联的分页SQL经典案例
    分页技术COUNT STOPKEY和SORT ORDER BY
    FILTER再来一例
    错误的选择了HASH JOIN!
    dojo加载树报错
    dojo中获取表格中某一行的某个值
    dojo处理删除操作报错
    分页语句优化
  • 原文地址:https://www.cnblogs.com/lavender-pansy/p/14288651.html
Copyright © 2011-2022 走看看