zoukankan      html  css  js  c++  java
  • OOAD-11 五大创建型模式之--单例模式

    package com.dding.pmsmigrateServer.web;
    
    public class Singlon {
        /**
         * 1、饿汉模式。直接定义为static final的域。仅在类加载时就定义且赋值。之后只能
         * 通过公开的接口来获取该instance实例。
         *
         * 优点:线程安全。因为在类加载时候就注入了。
         * 缺点:无论使不使用该类。都会去实例话那个唯一的对象。因此造成了内存的无端损耗
         */
        /*private static final Singlon instance = new Singlon();
    
        private Singlon(){};
    
        public static Singlon getInstance(){
            return instance;
        }*/
    
        /**
         * 2、饿汉模式。把instance的初始化放在静态代码块里面。和第一种方法非常相似。优缺点也一样。
         */
        /*private static Singlon instance;//加static保证类唯一
        static{
            instance = new Singlon();
        }
        private Singlon(){
    
        };
        public static Singlon getInstance(){
            return instance;
        }*/
    
    
        /**
         * 3、懒汉模式(线程不安全)
         * 优点:需要用到instance时候再去初始化,不会造成内存的无用消耗
         * 缺点:没有考虑线程安全,如果在多线程的环境下,会出现创建多个instance实例的问题
         */
        /*private static Singlon instance;
    
        private Singlon(){};
    
        public static Singlon getInstance(){
            if (null == instance){
                instance = new Singlon();
            }
            return instance;
        }*/
    
        /**
         * 4、懒汉模式(线程安全)
         * 优点:延迟加载,使用的时候再去初始化instance。且加了锁保证同一时间只有一个线程能去调用
         * getInstance()方法。保证多线程情况下的安全性
         * 缺点:多线程环境下效率太低了。每一次去获取实例时都要做加锁,也就是同步处理。就会造成线程阻塞。
         * 原本初始化instance只有一次。但是这么写导致了每次都要去加锁,判断有没有锁。不好
         */
        /*private static Singlon instance;
    
        private Singlon(){};
    
        public synchronized static Singlon getInstance(){
            if (null == instance){
                instance = new Singlon();
            }
            return instance;
        }*/
    
        /**
         * 5、懒汉模式(改良版线程安全)
         * 优点:延迟加载,保证线程安全性。且只在初始化instance的时候加锁。也就是只在第一次初始化的时候加锁来
         * 保证安全。之后的多线程获取实例,都不需要进行同步处理。极大的提高了效率
         */
        /*private static Singlon instance;
    
        private Singlon(){};
    
        public static Singlon getInstance(){
            if (null == instance){
                synchronized (Singlon.class){
                    if (null == instance){
                        instance = new Singlon();
                    }
                }
            }
            return instance;
        }*/
    
        /**
         * 6、枚举类型
         */
    
        /**
         * 使用枚举的单例模式
         * jvm保证enum不能被反射并且构造器方法只执行一次。
         */
        /*public class EnumSingleton{
            private EnumSingleton(){}
            public static EnumSingleton getInstance(){
                return Singleton.INSTANCE.getInstance();
            }
    
            private static enum Singleton{
                INSTANCE;
    
                private EnumSingleton singleton;
                //JVM会保证此方法绝对只调用一次
                private Singleton(){
                    singleton = new EnumSingleton();
                }
                public EnumSingleton getInstance(){
                    return singleton;
                }
            }
        }*/
    }
  • 相关阅读:
    DPDK安装方法 17.12.13
    numa.h:No such file or directory 解决方法
    17秋 软件工程 第六次作业 Beta冲刺 Scrum3
    17秋 软件工程 第六次作业 Beta冲刺 总结博客
    17秋 软件工程 第六次作业 Beta冲刺 Scrum2
    Paper Reviews and Presentations
    17秋 软件工程 第六次作业 Beta冲刺 Scrum1
    17秋 软件工程 第六次作业 Beta冲刺
    error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted
    17秋 软件工程 个人作业 软件产品案例分析
  • 原文地址:https://www.cnblogs.com/exceptionblog/p/11062290.html
Copyright © 2011-2022 走看看