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());
       }
    }
  • 相关阅读:
    Git Bash主题配置
    vuex里mapState,mapGetters使用详解
    Vue基础汇总实践
    Chrome for Mac键盘快捷键!来自Google Chrome官网!
    Vue中ESlint配置文件.eslintrc文件
    axios的get,post方法
    正则表达式识别标记——包括它之间的标记
    关于如何在微信里面让video不全屏播放
    javascript执行机制
    防止表单多次提交方法之二
  • 原文地址:https://www.cnblogs.com/bsyblog/p/7775122.html
Copyright © 2011-2022 走看看