• 《Java基础学习笔记》JAVA设计模式之单例模式


    设计模式:

    解决某一类问题最告之有效的方法,设计模式是纯思想的! Java中有23种设计模式。

    一、单例模式(Single): 解决一个类在内存中只有存在一个对象。

    想要保证对象的唯一:

    1,为了避免其他程序过多建立该类对象。先控制禁止其它他程序建立对象!
    2,还为了其他程序可以访问到该类对象,只好在本类中,自定义一个对象!
    3,为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式!

    代码实现步骤:

    1,将构造函数私有化。
    2,在类中创建一个本类对象。
    3,提供一个方法可以获取到该对象。

    /********************饿汉式************************/

    package com.pattern.single;
    
    /**
     * 饿汉式(建议在开发时使用此方式)
     * 先初始化对象。
     * Singleton类一进内存就创建对象。
     */
    public class Singleton
    {
        private static Singleton singleton = new Singleton();
        
        private Singleton(){};
        
        public static Singleton GetInstance()
        {
            return singleton;
        }
        
        public void Spreak()
        {
            System.out.println("我的名字是:"+ singleton);
        }
    }

    /********************懒汉式************************/

    package com.pattern.single;
    
    /**
     * 懒汉式(开发中不建议使用此方式,但面试时出题较多,主要提问在多线程下的解决方案)
     * 对象是方法被调用时,才初始化。也叫做对象的延时加载。
     * Singleton类进内存,对象还没有存在,只有调用了getInstance方法时,才建立对象。
     */
    public class Singleton
    {
        private static Singleton singleton = null;
        
        private Singleton(){};
        
        /*
             * 双重判断并加锁解决多线程下的效率问题。
             */
        public static Singleton GetInstance()
        {
            if(null==singleton)
            {
                synchronized (Singleton.class)
                {
                    if(null==singleton)
                        singleton = new Singleton();
                }            
            }
            
            return singleton;
        }
        
        public void Spreak()
        {
            System.out.println("我的名字是:"+ singleton);
        }
    }

    /****************************华丽的分隔线***************************/

    package com.pattern.single;
    
    /**
     * 多线程下的单例解决方案
     */
    public class Singleton
    {
        private static final Singleton SINGLETON = new Singleton();
        
        private Singleton(){};
        
        public synchronized static Singleton GetInstance()
        {
            return SINGLETON;
        }
        
        public void Spreak()
        {
            System.out.println("我的名字是:"+ SINGLETON);
        }
    }
    
    /****************************华丽的分隔线***************************/
    
    package com.pattern.single;
    
    public class Program
    {
        public static void main(String[] args)
        {
            Singleton singleton = Singleton.GetInstance();
            singleton.Spreak();
            
            Singleton singleton1 = Singleton.GetInstance();
            singleton1.Spreak();
                    
            Singleton singleton2 = Singleton.GetInstance();
            singleton2.Spreak();
            
            Singleton singleton3 = Singleton.GetInstance();
            singleton3.Spreak();
        }
    }
  • 相关阅读:
    02---Nginx
    7.如何发布vue项目到服务器
    6.vue如何上传到svn
    6.解决AXIOS的跨域问题
    4.VUEX到底是什么
    3.sublime vue 语法高亮插件安装
    2.vue 安装教程
    1.Google Chrome浏览器 控制台全解析
    6.如何使用jedis的线程池
    java如何LOG打印出日志信息
  • 原文地址:https://www.cnblogs.com/cxmsky/p/2845702.html
Copyright © 2020-2023  润新知