zoukankan      html  css  js  c++  java
  • Java单例模式 多种实现方式

    一:通过静态私有成员实现单例模式

    (1):私有化构造函数

    (2):new静态实例属性对象,加锁。

    单例类:

    package SinglePag;
    /*
     * 构造函数私有化,结合锁+静态的概念 实现单例模式
     */
    public class SingleDemo {
        //防止类的实例化
        private SingleDemo(){
            
        }
        //静态 实例 属性
        private static SingleDemo singleD;
        //获取对象实例 (单例的方式 ),锁住当前类(加锁)
        
        public synchronized static SingleDemo getInstance(){
            if(singleD == null){
                singleD = new SingleDemo();
            }
            return singleD;
        }
    }

    实现:

    package SinglePag;
    
    public class SingleWinform {
        public static void main(String[] args) {
            SingleDemo singleDemo = SingleDemo.getInstance();
            System.out.println(singleDemo.hashCode());
            SingleDemo singleDemo2 = SingleDemo.getInstance();
            System.out.println(singleDemo2.hashCode());
        }
    }


    二:静态内部类实现单例模式

    (1):私有化构造函数

    (2):私有静态内部类,创建静态实例成员对象

    (3):静态实例获取方法

    单例类:

    package SinglePag;
    
    public class SingleInnerStatic {
        //静态内置类
        private static class InnerStatic{
            //静态私有 实例属性
            private static SingleInnerStatic singleInstance;
            static{
                singleInstance = new SingleInnerStatic();
            }
        }
        
        //私有化构造函数,防止实例化
        private SingleInnerStatic(){
            
        }
        
        public static SingleInnerStatic getInstance(){
            return InnerStatic.singleInstance;
        }
    }

    实现:

    package SinglePag;
    
    public class SingleStaticWinform {
       public static void main(String[] args) {
           SingleInnerStatic singleInnerStatic =SingleInnerStatic.getInstance();
           System.out.println(singleInnerStatic.hashCode());
           
           SingleInnerStatic singleInnerStatic2 = SingleInnerStatic.getInstance();
           System.out.println(singleInnerStatic2.hashCode());
       }
    }
  • 相关阅读:
    Qt passwd echoMode placeholer QString.trimmed()
    bit opt
    Linux Kernel Development系统调用
    Linux Kernel Development——列出系统中所有的进程
    Linux Kernel Development——内存管理
    Linux Kernel Development——定时器和时间管理
    Linux Kernel Development——内核同步方法
    [转]Linux 2.6中断下半部机制分析
    Linux Kernel Development——中断
    Linux Kernel Development——虚拟文件系统
  • 原文地址:https://www.cnblogs.com/bsyblog/p/7775122.html
Copyright © 2011-2022 走看看