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

    • 简单方式:

    package com.gara.singleton;
    
    import java.awt.event.MouseWheelEvent;
    
    /**
     * 单例模式一:
     *         简单的方式:在并发执行时可能存在多个实例
     * @author Administrator
     *
     */
    public class SingletonDemo1 {
        
        private static SingletonDemo1 INSTANCE;
        
        private SingletonDemo1() { }
        
        public static SingletonDemo1 getInstance(){
            if (INSTANCE == null) {
                INSTANCE = new SingletonDemo1();
            }
            return INSTANCE;
        }
    }
    • 公共域方式

    package com.gara.singleton;
    /**
     * 单例模式2:
     *         公共域方式:返回时无法进行逻辑处理
     * @author Administrator
     *
     */
    public class SingletonDemo2 {
        
        public static final SingletonDemo2 INSTANCE = new SingletonDemo2();
        
        private SingletonDemo2(){ }
    }
    • 工厂化方式

    package com.gara.singleton;
    /**
     * 单例模式3:
     *         工厂化方式:可以在实例过程中添加逻辑
     * @author Administrator
     *
     */
    public class SingletonDemo3 {
        
        public static final SingletonDemo3 INSTANCE = new SingletonDemo3();
        
        private SingletonDemo3(){ }
        
        public static SingletonDemo3 getInstance(){
            return INSTANCE;
        }
    }
    • 枚举类方式

    package com.gara.singleton;
    
    /**
     * 单例模式4:
     *         枚举类方式:
     *             优点: 1.简洁优化
     *                  2.不存在多个实例的问题
     *                  3.不存在反序列化的问题
     * @author Administrator
     *
     */
    public enum SingletonDemo4 {
        
        INSTANCE;
        
        public static void sayHello(String name){
            System.out.println("hello "+name);
        }
        
    }
    • 静态内部类方式
    /**
     * 懒汉试(静态内部类)
     * 优点:结局性能问题和安全问题
     * 极简模式下的最经典代码设计
     */
    public class SingletonDemo5 {
    
        /**
         * 1.申明一个静态内部类
         * private :私有化保证不被修改
         * static : 保证全局唯一
         * final : 防止内部操作
         */
        private static class LazyHolder {
            private static final SingletonDemo5 INSTANCE = new SingletonDemo5();
        }
    
        // 2. 构造方法私有化
        // 如果不私有化,会有一个模式的无参构造,就意味着代码随时可以new出来!!!
        private SingletonDemo5() {
        }
    
        /**
         * 3. 提供静态方法获取实例
         * final: 确保别人不能覆盖
         */
        public static final SingletonDemo5 getInstance() {
            return LazyHolder.INSTANCE;
        }
    }

     

    • 测试
    package com.gara.singleton;
    
    public class SingletonTest {
        
        public static void main(String[] args) {
            
            System.out.println("SingletonDemo1:"+SingletonDemo1.getInstance());
            System.out.println("SingletonDemo1:"+SingletonDemo1.getInstance());
            
            System.out.println("SingletonDemo2:"+SingletonDemo2.INSTANCE);
            System.out.println("SingletonDemo2:"+SingletonDemo2.INSTANCE);
            
            System.out.println("SingletonDemo3:"+SingletonDemo3.getInstance());
            System.out.println("SingletonDemo3:"+SingletonDemo3.getInstance());
            
            System.out.println("SingletonDemo4:"+SingletonDemo4.INSTANCE);
            System.out.println("SingletonDemo4:"+SingletonDemo4.INSTANCE);
         System.out.println("SingletonDemo3:"+SingletonDemo5.getInstance());
            System.out.println("SingletonDemo3:"+SingletonDemo5.getInstance());
         SingletonDemo4.INSTANCE.sayHello("LiuLiu"); } }

    输出结果:

    SingletonDemo1:com.gara.singleton.SingletonDemo1@139a55
    SingletonDemo1:com.gara.singleton.SingletonDemo1@139a55
    SingletonDemo2:com.gara.singleton.SingletonDemo2@1db9742
    SingletonDemo2:com.gara.singleton.SingletonDemo2@1db9742
    SingletonDemo3:com.gara.singleton.SingletonDemo3@106d69c
    SingletonDemo3:com.gara.singleton.SingletonDemo3@106d69c
    SingletonDemo4:INSTANCE
    SingletonDemo4:INSTANCE

    SingletonDemo3:com.gara.singleton.SingletonDemo3@eed1f14
    SingletonDemo3:com.gara.singleton.SingletonDemo3@eed1f14
    hello LiuLiu



    在能不能成为之前,请先问自己 想不想成为 想要成为什么样的人 只要是迫切的想要成为,那你就是可以的!
  • 相关阅读:
    arm单板上移植gdb
    video on web
    chromium源码阅读
    CE-HTML简介
    multi-tap
    DPDK 网卡RSS(receive side scaling)简介
    c语言实现带LRU机制的哈希表
    Linux TCP协议使用的变量
    scp源码浅析
    Linux e1000e网卡驱动
  • 原文地址:https://www.cnblogs.com/gara/p/5771090.html
Copyright © 2011-2022 走看看