码迷,mamicode.com
首页 > 其他好文 > 详细

【剑指offer】面试题 2. 实现 Singleton模式

时间:2018-05-11 23:54:49      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:zed   main   一个   off   method   print   hand   enum   私有   

面试题 2. 实现 Singleton模式

  • 题目:设计一个类,我们只能生成该类的一个实例。
  • 单例模式:确保一个类只有一个实例,并提供了一个全局访问点。

Code

  • 1.饿汉模式

    //饿汉模式
    public class Singleton1 {
        //私有化构造方法
        private Singleton1(){}
        private static Singleton1 instance = new Singleton1();
        public static Singleton1 getInstance1(){
            return instance;
        }
    }
  • 2.饿汉模式、变种

    //饿汉模式、变种
    public class Singleton2 {
        //私有化构造方法
        private Singleton2(){}
        private static  Singleton2 instance = null;
        static{
            instance = new Singleton2();
        }
        public static Singleton2 getInstance2(){
            return instance;
        }
    }
  • 3.懒汉、线程不安全

    //懒汉、线程不安全
    public class Singleton3 {
        //私有化构造方法
        private Singleton3(){}
        private static Singleton3 instance = null;
        public static Singleton3 getInstance3(){
            if(instance==null){
                instance = new Singleton3();
            }
            return instance;
        }
    }
  • 4.懒汉、线程安全

    //懒汉、线程安全
    public class Singleton4 {
        //私有化构造方法
        private Singleton4(){}
        private static Singleton4 instance;
        public static synchronized Singleton4 getInstance4(){
            if(instance==null){
                instance = new Singleton4();
            }
            return instance;
        }
    }
  • 5.静态内部类

    //静态内部类
    public class Singleton5 {
        //私有化构造方法
        private Singleton5(){}
        //静态内部类
        private static class SingletonHandler{
            private static final Singleton5 INSTANCE = new Singleton5();
        }
        public static Singleton5 getInstance5(){
            return SingletonHandler.INSTANCE;
        }
    }
  • 6.枚举

    //枚举
    public enum Singleton6 {
        INSTANCE;  
        public void whateverMethod() {  
    
        }  
    }
  • 7.双重校验锁

    //双重校验锁
    public class Singleton7 {
        //私有化构造方法
        private Singleton7(){}
        private volatile static Singleton7 instance;
        public static Singleton7 getInstance7(){
            if(instance==null){
                synchronized(Singleton7.class){
                    if(instance==null){
                        instance = new Singleton7();
                    }
                }
            }
            return instance;
        }
    }
  • 测试类

    public class Test {
        public static void main(String[] args) {
            Singleton1 instance1 = Singleton1.getInstance1();
            Singleton1 instance2 = Singleton1.getInstance1();
            System.out.println("单例模式一:"+(instance1==instance2));
    
            Singleton2 instance3 = Singleton2.getInstance2();
            Singleton2 instance4 = Singleton2.getInstance2();
            System.out.println("单例模式二:"+(instance3==instance4));
    
            Singleton3 instance5 = Singleton3.getInstance3();
            Singleton3 instance6 = Singleton3.getInstance3();
            System.out.println("单例模式三:"+(instance5==instance6));
    
            Singleton4 instance7 = Singleton4.getInstance4();
            Singleton4 instance8 = Singleton4.getInstance4();
            System.out.println("单例模式四:"+(instance7==instance8));
    
            Singleton5 instance9 = Singleton5.getInstance5();
            Singleton5 instance10 = Singleton5.getInstance5();
            System.out.println("单例模式五:"+(instance9==instance10));
    
            Singleton6 instanceOne = Singleton6.INSTANCE;
            Singleton6 instanceTwo = Singleton6.INSTANCE;
            System.out.println("单例模式五:"+(instanceOne==instanceTwo));
    
            Singleton7 instance11 = Singleton7.getInstance7();
            Singleton7 instance12 = Singleton7.getInstance7();
            System.out.println("单例模式七:"+(instance11==instance12));
        }
    }

    结果

    单例模式一:true
    单例模式二:true
    单例模式三:true
    单例模式四:true
    单例模式五:true
    单例模式五:true
    单例模式七:true

【剑指offer】面试题 2. 实现 Singleton模式

标签:zed   main   一个   off   method   print   hand   enum   私有   

原文地址:https://www.cnblogs.com/hglibin/p/9026546.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!